[英]knockout nested model observableArray is not defined
我有一个非常基本的结构,带有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可以按预期工作。当我尝试访问根数组中的一个对象上的数组时,事情崩溃了!
更新
添加了用于在数组中添加新对象的函数
我猜我需要为每个数组提供一个带有创建事件的映射,但是不确定该去哪里
想通了..问题出在我的添加处理程序中
self.addModel3 = function(m3) {
if (m3) self.model3Array.push(m3)
else self.model3Array.push(new model3);
}
以为我很聪明,并且假设除非我明确指定它们,否则它将不带任何参数调用,
但以这种方式声明点击处理程序:
<button ... data-bind="click: addModel2">
实际上将通过模型作为第一个参数。 所以我实际上是在添加根模型,而不是我期望的嵌套模型。 而且没有javascript错误,只是我原本期望的属性最终丢失了
从您的示例中, model2.model3array
应该是model2.model3Array
?
Hth,
亚伦
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.