Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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
Jquery 加载为视图还是视图模型?_Jquery_Knockout.js_Durandal 2.0_Durandal Navigation - Fatal编程技术网

Jquery 加载为视图还是视图模型?

Jquery 加载为视图还是视图模型?,jquery,knockout.js,durandal-2.0,durandal-navigation,Jquery,Knockout.js,Durandal 2.0,Durandal Navigation,使用Durandal 2.0.1、淘汰赛3.0.0、RequireJS 2.1.10 以下是背景信息,仅设置阶段: 我有一个基本问题,关于是将子项作为视图还是视图模型加载。我正试图遵循Durandaljs网站上的设计。我有一个index.cshtml页面,其中有一个名为applicationHost的div元素,它使用data main=App/main作为index.cshtml上脚本标记的一部分加载shell.html 我正在尝试模块化我的标记,因此在shell.html中,我有一个div,

使用Durandal 2.0.1、淘汰赛3.0.0、RequireJS 2.1.10

以下是背景信息,仅设置阶段:

我有一个基本问题,关于是将子项作为视图还是视图模型加载。我正试图遵循Durandaljs网站上的设计。我有一个index.cshtml页面,其中有一个名为applicationHost的div元素,它使用data main=App/main作为index.cshtml上脚本标记的一部分加载shell.html

我正在尝试模块化我的标记,因此在shell.html中,我有一个div,它使用以下命令加载header.html:

<!-- ko compose: 'viewmodels/header' -->
<!-- /ko -->
在header.html中,我有另一个div未能成功加载guestSummary.html

guestSummary guestSummary.js的ViewModel检索数据并显示一些来宾感兴趣的统计信息,我正试图使用Knockout将其绑定到guestSummary.html

由于guestSummary.html中的控件需要进行数据查找和绑定,因此我认为需要使用header.html中的以下代码加载guestSummary.html:

<!-- ko compose: 'viewmodels/guestSummary' -->
<!-- /ko -->
当我尝试这样做时,我从Google Chrome developer tools中的console选项卡上得到以下错误消息,Uncaught error:未能加载组合模块viewmodels/GuestCommand。详细信息:未定义模型

看看Durandaljs网站,它说,我们导航应用程序中的每个页面都由一个视图和一个视图模型组成。按上述方式设置结构后,扩展应用程序所需的全部工作就是将新视图模型与相应视图一起放置在viewmodels文件夹中。然后,您只需在main.js中向路由器注册它们。当相应的路由被导航到时,路由器将定位您的模块,组合基础设施将确保它被绑定并插入DOM

上面的指导似乎表明我应该使用视图而不是视图模型,因为我没有尝试导航到guestSummary.html页面,而且似乎不需要将模型添加到路由器,我也没有真正使用路由器导航到guestSummary.html页面

由于guestSummary需要数据和数据绑定,我是否最好尝试将guestSummary.html作为视图加载,并将数据绑定到$parent或$parent.parent等属性,而不是尝试将guestSummary.js文件与guestSummary.html文件合并,并将两者作为视图模型加载


有没有更好的方法来完成我想要完成的事情?提前感谢您可能愿意分享的任何帮助。

如果现有视图模型对象不需要/保证自己的视图模型,您可以将视图绑定到现有视图模型对象。这一点在本文中进行了简要讨论

组合显式模型和视图[当对象提供给组合绑定时..]

如果存在视图属性,但没有模型属性,则将解析该视图并将其绑定到bindingContext,然后将其注入元素。。如果模型和视图属性都存在,则它们将被绑定并注入元素中

例如,要显式绑定模型

compose: {
    view: 'views/guestSummary',
    model: somethingThatResolvesToARelevantModelInThisContext
}
视图中的$root将是模型值


我建议不要使用$parent属性,因为它只会把代码弄得一团糟。如果适用,请使用绑定名称,例如每个绑定和-在本例中,我甚至会使用$root上的withProperties来提供一个更具意义的名称。

谢谢,今晚我将再次尝试研究该名称。出于某种原因,我没有得到我应该得到的构图和导航的概念。感谢您的指导!你写了一个很长的问题。做一个简洁明了的问题陈述和问题可能会有帮助,从而在你的问题上获得更多的帮助。就目前而言,一个人需要花20分钟的时间来阅读这篇文章:谢谢你的建议。虽然我还没有解决这个问题,但我确实通过使用加载guestSummary.html取得了进展,然后我将控件绑定到header.html绑定上下文公开的属性,并且所有操作都正常,除了我现在看到[object Promise]中应该有值,所以我现在正在学习更多关于这方面的知识。当做