0

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/

我可能不太正确地进行绑定,我想要实现的是根据本文的下拉级联,它与上面的代码一起使用,除了"with: VehicleManufacturer"绑定,即未显示所选制造商的名称。

4

2 回答 2

3

认为acomputed在这里使用是错误的(您链接到的文章已关闭)。computed当您要计算取决于其他可观察属性的值时,通常使用A。您计算的read函数只返回计算本身。

我将对其进行修改以使用普通的可观察对象并手动订阅该可观察对象的更改:

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'); 
});

示例:http: //jsfiddle.net/ryDjs/7/

于 2013-02-22T17:42:25.693 回答
1

是你想要完成的吗?小提琴坏了,因为你没有参考ko.mapping.

更新:

安德鲁是对的,你不应该使用computeds 来写值。Computeds 应该是只读的。当您想从其他值派生一个值时使用它们。

这里有另一个小提琴可以解决你的问题。它使用 a computed,但您也可以使用 a 来执行此操作subscribe

于 2013-02-22T17:05:27.390 回答