淘汰对象值变化,但ui保持不变

时间:2013-04-17 02:02:42

标签: javascript knockout.js

我有一个绑定到SelectedFormat值的下拉列表。列表选项在加载时从外部源填充,并匹配基于id的视图模型data.Format对象。

查看js fiddle

任何人都可以告诉我为什么模型会更新,但UI没有使用正确的Format.Name

进行更新

感谢。

HTML:

<div data-bind="text:data.Format.Name"></div>
<select data-bind="
    options:Controls,
    optionsText: 'Name',
    value: data.SelectedFormat"></select>

型号:

var jsonData = {
    Id: "abc-123",
    Name: "Chicken Cheese",
    Format: {
        Id: 2,
        Name: 'Medium',
        Other: 'Bar'
    }
};

var self = this;
self = ko.mapping.fromJS(data);
self.SelectedFormat = ko.observable(
    //return the first match based on id
    $.grep(vm.Controls,function(item){            
        return item.Id === self.Format.Id();
    })[0]
);

//when changed update the actual object that will be sent back to server 
self.SelectedFormat.subscribe(function (d) {
    this.Format = d;        
},self);

1 个答案:

答案 0 :(得分:1)

在您的代码中,您有FormatSelectedFormat。前者不是可观察的,因此无法触发更新。您必须改为使用SelectedFormat

<div data-bind="text:data.SelectedFormat().Name"></div>

示例:http://jsfiddle.net/QrvJN/9/