Knockout Mapping插件不能处理对象数组

时间:2014-08-24 19:40:04

标签: knockout.js knockout-mapping-plugin

Knockout映射不能处理对象数组。

这是我的小提琴 http://jsfiddle.net/varunfiddle/03rv2the/

基本上我试图将一组对象映射到一个可观察的数组中。

var ViewModel = function() {
    var self = this;
    var newData = 
                    [{"PersonId":1,"Name":"LoginUser1","OriginalSource":null,"Remarks":null},
                     {"PersonId":2,"Name":"LoginUser1","OriginalSource":null,"Remarks":null}];

    self.persons=ko.mapping.fromJS(newData, {}, self);

};

var myVM = new ViewModel();
ko.applyBindings(myVM);

然后将其绑定在html中

<table>
    <tbody data-bind="foreach:persons">
        <tr>
            <td>
                <label data-bind="text:Name"></label>
            </td>
        </tr>
    </tbody>

</table>

我没有看到数据绑定发生在对象数组上。 有修复吗?感谢。

1 个答案:

答案 0 :(得分:2)

删除调用ko.mapping.fromJS()时的第三个参数(并删除第二个参数,现在不需要它)。第三个参数是要添加映射属性的现有对象。您不希望将该数组添加到视图模型中,您只是尝试使用映射属性创建新数组。

self.persons = ko.mapping.fromJS(newData);

如果要使用映射插件添加到视图模型,则需要创建一个与要创建的视图模型具有相同结构的对象,然后将其传递给函数(使用第三个参数)

var ViewModel = function() {
    var self = this;
    var model = {
        persons: [
            {"PersonId":1,"Name":"LoginUser1","OriginalSource":null,"Remarks":null},
            {"PersonId":2,"Name":"LoginUser1","OriginalSource":null,"Remarks":null}
        ]
    };

    ko.mapping.fromJS(model, {}, self);
};