2013-01-10 25 views
2

我正在尝试为正在处理的ASP.NET MVC 4应用程序获取MVVM安装程序。最近我遇到了John Papa的优秀演示/代码示例(可以在这里查看http://www.johnpapa.net/recent-presentation-on-spa-basics/)。在多页面应用程序中使用Breeze

他谈论的是有一个jquery/knockout.js/breeze.js软件堆栈,但仅限于单页面应用程序(SPA)的上下文中。

翻遍代码 - 我看到bootstrapper.js整齐地设置了所有视图的绑定。

ko.applyBindings(vm.sessions, $(app.viewIds.sessions).get(0)); 
ko.applyBindings(vm.speakers, $(app.viewIds.speakers).get(0)); 
ko.applyBindings(vm.session, $(app.viewIds.session).get(0)); 

如果我有更多的CSHTML文件,分割更复杂的应用程序的意见,我怎么能很好地处理引导捆扎导航发生什么呢?

回答

4

您可以使用几种方式(把我的头顶部)在HTML的其他视图链接: 1)@ Html.Partial 2)Knockout External Templating plugin 3)自定义AJAX去抓住HTML的意见 4)您所选择的模板引擎抓住它 5)RequireJS和它的文本插件 6)加载它们都在1页(恶心的大小的东西)

如果你有淘汰赛已经,.您可能需要使用Knockout外部模板插件。它非常适合拉入远程HTML。如果你已经有require.js,文本插件也很好。

+1

关于要求/文本的方法,你应该看看[Durandal](http://durandaljs.com/)。你可能很快会听到更多的消息。 – Ward

+0

@John Papa听起来像require.js/text.js,我们可以干净地将视图和视图模型“捆绑”在一起,这有助于在我们缩放应用程序时保持复杂性。我已经阅读了一些关于Backbone.js的内容,但是随后开始讨论MVC和MVVM之间的讨论。我个人的经验一直是ASP.NET MVC 4中的约10个视图,逻辑遍布在“ui模型”,控制器和视图之间,这违反了适当的关注点分离。我还使用MVVM开发了Silverlight 5项目,并且与MVC项目相比,更多的视图(〜35)更易于管理。 –

+0

我见过这两种方式。我同意你对分离的担忧是有效的。 JavaScript有很多分离模式。 AMD和require.js可以帮助那些相当好的用户。 –

1

你仍然可以把它作为一个SPA,但独立的所有的“网页”成单独CSHTML文件,然后使用加载它们在你index.cshtml Html.Partial:

@Html.Partial("_Substation") 
@Html.Partial("_Location") 
@Html.Partial("_Weather") 
@Html.Partial("_RealTimeValues") 
@Html.Partial("_EventView") 

所有这些字符串是我单独的cshtml文件的名称,但它仍然是SPA。

除非有另一个原因,你想没有SPA?

+0

这是一个很好的想法,将代码分离成不同的文件,这是目标之一。但仍然不能阻止预先加载所有内容。也许当你点击partials可以加载,但来自Silverlight MVVM世界,这听起来像一个恶心的解决方案。 –

+0

我想这取决于你在说多少html。在刚刚完成的SPA中,具有这5个部分视图的html在总共1.1 MB中占用3 KB,一旦缩小,gzip就会发挥其魔力。我不会在开始时加载每个部分视图的数据。所以我会质疑究竟是多大的开销,实际上是预先加载所有的html,尤其是当你使用knockout为你生成大量的重复性html时。 –