Knockout.js ko.dataFor()是否与'select'元素一起工作?

Knockout.js ko.dataFor()是否与'select'元素一起工作?,knockout.js,Knockout.js,我试图在select元素上使用ko.dataFor(),但它返回了整个ViewModel。我希望得到所选选项的对象,但我总是得到ViewModel。我尝试过传递选择和选项,但无论哪种方式,我都得到了相同的结果 ko.DataFor(选择) ko.DataFor(选项) 函数MyViewModel(){ var self=这个; self.companys=ko.observearray([{id:1,名称:“雪佛兰”},{id:2,名称:“福特”},{id:2,名称:“道奇”}]);

我试图在
select
元素上使用
ko.dataFor()
,但它返回了整个ViewModel。我希望得到所选
选项的对象,但我总是得到ViewModel。我尝试过传递
选择
选项
,但无论哪种方式,我都得到了相同的结果



ko.DataFor(选择)

ko.DataFor(选项)

函数MyViewModel(){ var self=这个; self.companys=ko.observearray([{id:1,名称:“雪佛兰”},{id:2,名称:“福特”},{id:2,名称:“道奇”}]); self.countries=ko.observearray([{id:1,名称:“USA”},{id:2,名称:“Canada”},{id:2,名称:“Mexico”}]); } var vm=新的MyViewModel(); ko.应用绑定(vm); $(“#公司”).change(function(){ $(“#a”).val(“dataFor(“+this.id+”):“+ko.toJSON(ko.dataFor(this))); var selectedOption=$(this.find(“:selected”)[0]; $(“#b”).val(“dataFor(“+this.id+”)”:+ko.toJSON(ko.dataFor(selectedOption)); });
函数
ko.dataFor()
提供的是元素绑定到的对象。如果访问
$data
上下文变量,绑定将看到相同的对象。
options
绑定生成的选项元素使用相同的上下文,因此您不会看到任何差异。它只与绑定上下文发生更改的绑定相关(例如,在foreach绑定中)


如果您使用knockout的特性来访问您想要的对象,而不是依赖jquery,那就更好了。创建一个可观察对象并将该值绑定到select。然后,可以使用选定的值执行所需操作

function MyViewModel() {
    var self = this;
    self.selectedCompany = ko.observable();
    self.companies = ko.observableArray(...);
    self.countries = ko.observableArray(...);
}


已选择
函数
ko.dataFor()
提供的是元素绑定到的对象。如果访问
$data
上下文变量,绑定将看到相同的对象。
options
绑定生成的选项元素使用相同的上下文,因此您不会看到任何差异。它只与绑定上下文发生更改的绑定相关(例如,在foreach绑定中)


如果您使用knockout的特性来访问您想要的对象,而不是依赖jquery,那就更好了。创建一个可观察对象并将该值绑定到select。然后,可以使用选定的值执行所需操作

function MyViewModel() {
    var self = this;
    self.selectedCompany = ko.observable();
    self.companies = ko.observableArray(...);
    self.countries = ko.observableArray(...);
}


已选择

<select id="companies"
        data-bind="value: selectedCompany,
                   options: companies,
                   optionsText: 'name',
                   optionsCaption: ' '">
</select>
<br/>
Selected<br/>
<textarea cols="40" rows="10" data-bind="text: ko.toJSON(selectedCompany)">
</textarea>