Javascript 多视图模型break knockout.js
我正在尝试使用多个视图模型,正如建议的那样 控制台中出现错误,抱怨未定义变量: 未捕获引用错误:无法处理绑定“foreach:function(){return seals}” 消息:未定义密封件 HTML 问题在于:Javascript 多视图模型break knockout.js,javascript,knockout.js,knockout-3.0,Javascript,Knockout.js,Knockout 3.0,我正在尝试使用多个视图模型,正如建议的那样 控制台中出现错误,抱怨未定义变量: 未捕获引用错误:无法处理绑定“foreach:function(){return seals}” 消息:未定义密封件 HTML 问题在于: ko.applyBindings(demo, document.body); 您正在将模型应用于document.body,因此它将尝试解析并绑定整个文档。当它到达具有以下内容的零件时: <!-- ko foreach: seals --> 出现错误是因为演
ko.applyBindings(demo, document.body);
您正在将模型应用于document.body
,因此它将尝试解析并绑定整个文档。当它到达具有以下内容的零件时:
<!-- ko foreach: seals -->
出现错误是因为演示
模型没有密封
属性
实际上,您不希望绑定的元素重叠。换句话说,不要将一个模型绑定到绑定到另一个模型的元素的子元素。他们应该是兄弟姐妹或堂兄弟姐妹。不是直接的后代。< P>如果你需要在你的视图中嵌套几个视图模型,或者甚至在子-父关系中,你应该考虑使用KokOutt组件。除此之外的另一种可能性是在主viewmodel中使用
将(此)
应用于其他viewmodels的“类”,以便主viewmodel某种程度上继承所引用模型的功能和属性。但是,如果您的viewmodels中存在名称并发,这将导致问题。是的,我认为这是有意义的。撇开一个问题不谈。您建议在一个站点中创建多少个模型?我正在使用一个不同的菜单弹出窗口,但不确定是否有必要分离,以及它的优点。文件里不太清楚。比如,一个用于标题,另一个用于正文,另一个用于独立元素,这有意义吗?@Alvaro:有点像“一根绳子有多长?”的问题。答案是“视情况而定”。就我个人而言,我更喜欢一个模型,其中包含我想要/需要/有意义的尽可能多的子模型,而不是尝试将不同的模型绑定到DOM的不同部分。如果以后需要把这些部分混在一起会更容易。对,我明白了。谢谢。在这种情况下,在数据绑定之前,您必须始终使用with
,不是吗?@Alvaro:您可以对绑定到视图模型的不同节使用with
。或者您可以完全限定您的属性,例如foreach:mySubModel.myProperty
。或者,您可以根据需要混合使用这两种方法。另外,如果您在带有绑定块的中需要导航回某个级别,请不要忘记$parent
。
ko.applyBindings(demo, document.body);
<!-- ko foreach: seals -->