Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多视图模型break knockout.js_Javascript_Knockout.js_Knockout 3.0 - Fatal编程技术网

Javascript 多视图模型break knockout.js

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 --> 出现错误是因为演

我正在尝试使用多个视图模型,正如建议的那样

控制台中出现错误,抱怨未定义变量:

未捕获引用错误:无法处理绑定“foreach:function(){return seals}” 消息:未定义密封件

HTML

问题在于:

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 -->