html :(生成我的knockoutmvc)
<select class="span12" data-bind="options : VehicleManufacturers,optionsText : function(item) { return item.Name; },optionsCaption : 'Select Manufacturer...',value : VehicleManufacturer"
id="VehicleManufacturer">
<option value="">Select Manufacturer...</option>
<option value="">AUDI</option>
</select>
<span data-bind="with: VehicleManufacturer">
<span data-bind="text: Name"></span>
</span>
脚本:
var viewModelJs = {
"VehicleManufacturers": [{
"Id": 5,
"Name": "AUDI"
}],
"VehicleManufacturer": null
};
var viewModel = ko.mapping.fromJS(viewModelJs);
ko.applyBindings(viewModel);
viewModel.VehicleManufacturer = ko.computed({
read: function () {
return viewModel.VehicleManufacturer;
},
write: function (manufacturer) {
// Populate Model list routine
},
owner: viewModel
});
JsFiddle:http://jsfiddle.net/ryDjs/2/
我可能不会完全正确地进行绑定,我正在尝试实现的是按照this article下拉级联,这是使用上面的代码,除了"with: VehicleManufacturer"
绑定,即未显示所选制造商的名称。
答案 0 :(得分:3)
我认为 computed
在这里使用是错误的(你链接的文章是关闭的)。当您想要计算依赖于其他可观察属性的值时,通常会使用computed
。您计算的read
函数只返回计算本身。
我会重做这个以使用普通的observable并手动订阅对该observable的更改:
var viewModelJs = {
"VehicleManufacturers": [{
"Id": 5,
"Name": "AUDI"
}],
"VehicleManufacturer": null
};
var viewModel = ko.mapping.fromJS(viewModelJs);
ko.applyBindings(viewModel);
viewModel.VehicleManufacturer.subscribe(function (manufacturer) {
alert('dfdf');
});
答案 1 :(得分:1)
this what you were trying to accomplish?小提琴被打破了,因为你没有引用ko.mapping
。
Andrew是对的,你不应该使用computed
来写值。 Computed
应该是只读的。如果要从其他值派生值,请使用它们。
我有another fiddle here解决了你的问题。它使用computed
,但您也可以使用subscribe
。