0

我有一个非常基本的结构,有 2 个嵌套模型

model1
----observableArray of model2

model2
----observableArray of model3

我能够绑定到model1,并遍历model2数组(使用foreach)并绑定到属性。

问题是当我尝试绑定到 model3 数组时:

[root] data-bind(blah: model1.property1 // OK
[root] foreach: model2Array             // OK 
    data-bind(blah: model2.property1)   // OK
    data-bind(blah: model2.model3Array) // Undefined exception

model1、model2、model3 的定义方式相同

var model3 = function(data) {
        var self = this;
        if (data) ko.mapping.fromJS(data, {}, self);
        else ko.mapping.fromJS(_model2Template, {}, self);
}
var model2 = function(data) {
        var self = this;
        if (data) ko.mapping.fromJS(data, {}, self);
        else ko.mapping.fromJS(_model2Template, {}, self);

        self.model3Array = ko.observableArray();
        self.addModel3 = function(m3) {
            if (m3) self.model3Array.push(m3)
            else self.model3Array.push(new model3);
        }
}
var model1 = function(data) {
        var self = this;
        if (data) ko.mapping.fromJS(data, {}, self);
        else ko.mapping.fromJS(_model1Template, {}, self);

        self.model2Array = ko.observableArray();
        self.addModel2 = function(m2) {
            if (m2) self.model2Array.push(m2)
            else self.model2Array.push(new model2);
        }
}

window.model1 = new model1();
ko.applyBindings(model1);

有趣的部分是model1上的observableArray按预期工作..当我尝试访问根数组中的一个对象上的数组时,事情就崩溃了!

更新

添加了用于在数组中添加新对象的函数

我需要为每个数组提供一个包含创建事件的映射,但不确定会去哪里

4

2 回答 2

1

想通了..问题出在我的添加处理程序中

    self.addModel3 = function(m3) {
        if (m3) self.model3Array.push(m3)
        else self.model3Array.push(new model3);
    }

以为我很聪明,并假设除非我明确指定它们,否则它会在没有参数的情况下被调用,

但是以这种方式声明一个点击处理程序:

<button ... data-bind="click: addModel2"> 

实际上将模型作为第一个参数传递。所以我实际上是在添加根模型而不是我期望的嵌套模型。并且没有 javascript 错误,只是我期望的属性最终丢失了

于 2013-10-03T18:33:09.597 回答
0

从你的例子来看,model2.model3array应该是model2.model3Array

Hth,
亚伦

于 2013-10-03T17:54:37.350 回答