2011-06-28 33 views
11

我试图移植一个现有的asp mvc应用程序来使用knockoutjs(纯js/html),因为我不再需要asp mvc中的任何功能。然而我可以预见的一个问题是我处理我的一些页面的方式。KnockoutJS - 在主视图中的多个部分视图?

我有一个页面,其中包含大约12个部分视图,每个部分都有自己的模型。现在,随着淘汰赛JS好像你应该只有真正有1个视图模型/每页观点,但是我有页面包含了大量的信息,这些部分将类似于:

  • 客户详细信息
  • 客户地址
  • 客户最近的订单
  • 客户卡
  • 客户资金
  • ...

如果部分细节发生变化,使事情变得更加棘手,它需要更改另一部分中的数据。因此,让我们说你删除一张卡,然后告诉基金控制它不再有卡,所以不会有资金。 (这是一个抽象的例子,但希望能够说明这一点)

所以我有点不确定如何在淘汰赛中做到这一点,因为它宁愿将它作为一个大型模型,我会很高兴做到这一点,但它包含很多信息。以及多种形式,因为您可以更新您的地址而无需更新其他所有内容。

所以,我应该为这个视图制作一个大型模型并处理它?或者有没有办法让观点彼此交谈?

+0

有没有人有任何正常的教程一般Knockout,因为我发现文件有点简短,只有一些小例子。没有什么重要的像演示应用程序,它显示它在多个页面上工作等... – somemvcperson

+0

只是为了向演示应用程序位添加一些上下文,我发现他们的网站有一些体面的例子,但他们似乎只使用视图模型和视图,从来不是模型,所以这个其他模型是什么?否则它只是VVM ... – somemvcperson

回答

3

我的策略是使用一个大视图模型。不管你怎么说,局部视图都是服务器端的概念,一旦所有事情都转移到客户端,那么在单个页面中就会有大量的数据信息。

但是为了使事情易于管理,我确保每个Javascript操作代码都是在它自己的Partial视图中编写的。这样可以更轻松地跟踪功能和各自的代码。

因此,基本上你可以在主页面中填充主要Customers数组对象,然后调用函数来填充分别在每个局部视图中定义的细节,地址等。

+1

感谢您的回应,有一件事仍然让我担心一个大型模型的风格是大型模型(即地址,卡)中的每个模型都是独立保存的。然而,从我最初看起来,它看起来像你一次坚持整个模型...我必须写任何习俗来做到这一点?或者只是将saveCard(index)saveAddress(index)暴露为只是将其发送到服务器的方法而已? – somemvcperson

+0

不是真的。如果模型在较大的模型下,您只需确保在部分视图内正确引用它们,例如'Add Card'。我还没有真正测试过,因为我最终将所有内容都放在单一视图模型中。模型内没有模型;不是一个很好的解决方案。 – neebz

+2

顺便说一句,我只是意识到,你也可以应用多个绑定通过封装你的局部视图在一个div中,然后调用'ko.applyBinding(partialViewModel,“ID的div”)''。第二个参数描述应用绑定的位置。 – neebz

3

我会对一个怪物视图模型提出警告,因为它会创建一个紧密的耦合,您需要在复杂的应用程序中避免这种耦合。

更好的解决方案是在ko.subscribable之上建立一个pub/sub系统。通过管理对各种事件的订阅,促进了视图模型之间的通信。事先做好了一点工作,但是它将会带来收益。

Here是一篇博客文章,对该主题进行了扩展。我强烈推荐这个博客。它是针对淘汰赛的挑战和策略的极好资源。

相关问题