我的<select>中选择的项目在我的挖空控制器中为空</select>

时间:2013-11-27 10:52:45

标签: knockout.js

淘汰赛很新,所以它可能非常明显,但我很难找到有关它的具体信息。

我尝试进行级联下拉。第一个选择是填充服务器端,而不是Knockout,所以我认为我必须像这样绑定它:

<select 
    data-bind="value: CompanyId" 
    id="CompanyId" 
    name="CompanyId" 
    onchange="GetEmployees();">

    <option value="">...</option>
    ...
</select>

然后,在我的控制器中:

function CascadingDdLViewModelEmployeeEdit() {
    this.EmployeeList = ko.observableArray([]);
}

var objVMEmployeeEdit = new CascadingDdLViewModelEmployeeEdit();
ko.applyBindings(objVMEmployeeEdit);

function GetEmployees() {
    objVMEmployeeEdit.EmployeeList([]);
    var CompanyId = $("#CompanyId").val(); // EMPTY
    // ...
    });
}

但$(“#CompanyId”)。val()为空。我哪里错了?

修改

好的,我明白了。值数据绑定创建一个具有相同名称的变量(CompanyId),我只需要使用它。

function GetEmployees() {
    objVMEmployeeEdit.EmployeeList([]);
    var route = "/Company/GetEmployees/" + CompanyId;
    // ...
    });
}

但现在我得到之前选择的值,而不是触发事件的值。

1 个答案:

答案 0 :(得分:1)

对您的编辑做出回应,请尝试以下操作 - 在viewmodel中进行订阅而不是使用onchange事件:

CompanyId.subscribe(function (newValue){
  GetEmployees(newValue);
}

并更改GetEmployees以获取新值并使用它而不是CompanyId。

function GetEmployees(newValue) {
    objVMEmployeeEdit.EmployeeList([]);
    var route = "/Company/GetEmployees/" + newValue;
    // ...
    });
}