1

我有一个带有 observable 和 observableArray 的视图模型。假设单击按钮会填充 JSON 对象并将其映射到视图模型......我相信“应该”填充 observableArray。按钮点击发生。没有错误。如果我在映射发生时通过调试器运行 obserable 对象会被填充,但 obserableArray 不会。这意味着假设基于 observableArray 显示的 HTML 对象不会得到更新。

HTML:

<div data-bind="if: ErrorMessages().length"> <span>Error Messages</span>
    <ul data-bind="foreach: ErrorMessages">
        <li> <span data-bind="text: Description"></span>
        </li>
    </ul>
</div>
<button data-bind="click: ShowErrors">Go</button>

var ViewModel = function () {
    var me = this;
    me.AData = ko.observable();
    me.ErrorMessages = ko.observableArray([]);

Javascript:

    me.ShowErrors = function () {


        var testdata = {
            AData: {
                Something: 1
            },
            ErrorMessages: [{
                Description: 'Error #1',
                Code: '01'
            }, {
                Description: 'Error #2',
                Code: '02'
            }]
        };
        var jsonData = ko.toJSON(testdata);

        ko.mapping.fromJS(jsonData, {}, me);
    };
};
ko.applyBindings(new ViewModel());

http://jsfiddle.net/Eves/v9SEk/4/

我的真实代码伸出手并从 Web 服务获取数据。我认为上面创建了一个对象并将其转换为 JSON,然后使用 ko.mapping.fromJS 映射它最能代表正在发生的事情。无论如何...

我怀疑我做了一些愚蠢的事情,或者至少,假设了我不应该做的事情。

4

1 回答 1

2

您正在转换为 JSON,ko.toJSON(testdata)但您不是从 JSON 读取, ko.mapping.fromJS(jsonData, {}, me);而是从普通 JS 对象读取。

toJSONandfromJSON方法应该成对使用:

var jsonData = ko.toJSON(testdata);

ko.mapping.fromJSON(jsonData, {}, me);

并且同样适用于toJSand fromJS

var jsonData = ko.toJS(testdata);

ko.mapping.fromJS(jsonData, {}, me);

演示JSFiddle

于 2013-10-09T15:43:16.183 回答