挖空嵌套模型可观察数组未定义
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
模型 1、模型 2、模型 3 的定义方式相同
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">
WILL 实际上将模型作为第一个参数传递。 所以我实际上是在添加根模型而不是我预期的嵌套模型。 而且没有JavaScript错误,只是我期望的属性最终丢失了
从您的示例中,model2.model3array
应该model2.model3Array
?
呵,
亚伦
相关文章:
- knockoutjs可观察数组
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 如何使用敲除映射将空值映射到空的可观察数组
- 以不同的方式对相同的可观察数组进行排序
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- Knockout.js:如何根据可观察数组中的更改更改值
- 使用挖空.js如何刷新 Select 元素中的可观察数组
- 更新挖空中可观察数组中项目的属性
- 动态地向可观察数组中的特定项添加绑定(例如hasfocus)
- AngularJS:观察数组属性
- 对可观察数组foreach的更新删除了格式化knockoutjs
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 如何获取复选框值并将其插入到挖空中的可观察数组中
- 剔除不更新辅助表的可观察数组
- 如何让Knockout可观察数组与jQuery对话框一起工作
- 更改可观察数组会更改自定义绑定处理程序knockoutjs的可见性
- 正在更新Knockoutjs可观察数组项
- Knockout,无法解析空可观察数组中的绑定错误