何时在Knockout.js中创建新视图模型

何时在Knockout.js中创建新视图模型,knockout.js,knockout-3.0,knockout-3.2,Knockout.js,Knockout 3.0,Knockout 3.2,我已经看到,在knockout.js中谈论多视图模型时,通常会有一些混乱 ko文档并没有真正解释如何处理多视图模型,如何在它们之间进行通信,或者什么时候应该考虑它们 我发现解释了创建多个视图模型的不同方法以及如何与它们交互 我尝试了一下,创建了一个包含不同子模型的主模型: var MasterModel = function(){ this.orders = new ordersViewModel(), this.dates = new datesViewModel(),

我已经看到,在knockout.js中谈论多视图模型时,通常会有一些混乱

ko文档并没有真正解释如何处理多视图模型,如何在它们之间进行通信,或者什么时候应该考虑它们

我发现解释了创建多个视图模型的不同方法以及如何与它们交互

我尝试了一下,创建了一个包含不同子模型的主模型:

var MasterModel = function(){
    this.orders = new ordersViewModel(),
    this.dates = new datesViewModel(),
    this.equipment = new equipmentViewModel();
};
之后,我发现自己不得不在许多地方使用:nameOfModel,并为其创建额外的包装器或HTML注释,甚至只使用视图模型的名称作为前缀data bind=foreach:orders.getList

除此之外,我们还有它们之间通信的问题,尽管可以通过某种方式解决,但它似乎不像处理单个视图模型那样简单


我的问题是,创建多个视图模型是否值得?如果是,什么时候?这似乎只会增加更多的困难,我最终没有看到它的好处。是的,他们说它保持模块化。。。但我最终没有看到明显的优势

对于应该使用多少视图模型,或者是否应该使用一个综合视图模型,没有硬性规定

这一切都取决于您正在构建的应用程序的复杂性,以及您是否希望封装和模块化一些功能以供重用或保持正常

如果您发现自己正在构建一个复杂的应用程序,那么您可能会发现将应用程序模块化为单独的视图模型更易于管理和进一步更改

之后,我发现自己不得不在许多地方使用:nameOfModel,并为其创建额外的包装器或HTML注释,甚至只使用视图模型的名称作为前缀data bind=foreach:orders.getList


我使用了一个名为的框架,它促进了模块化和组合。它还提供了一些很棒的特性,比如路由和消息传递。DurandalJS的组合可以帮助您减少绑定的数量,因为它使用ko.applyBindings将视图模型和视图绑定到页面上的元素。

对于应该使用多少视图模型,或者是否应该使用一个综合视图模型,没有硬性规定

这一切都取决于您正在构建的应用程序的复杂性,以及您是否希望封装和模块化一些功能以供重用或保持正常

如果您发现自己正在构建一个复杂的应用程序,那么您可能会发现将应用程序模块化为单独的视图模型更易于管理和进一步更改

之后,我发现自己不得不在许多地方使用:nameOfModel,并为其创建额外的包装器或HTML注释,甚至只使用视图模型的名称作为前缀data bind=foreach:orders.getList


我使用了一个名为的框架,它促进了模块化和组合。它还提供了一些很棒的特性,比如路由和消息传递。DurandalJS的组合可以帮助您减少绑定的数量,因为它使用ko.applyBindings将视图模型和视图绑定到页面上的元素。

我同意Anish Patel的观点,这取决于它,它是关于分离关注点,并将您的类保持在单一责任原则中,每个类只做一件事,我发现用视图模型很难做到这一点。您可能还需要考虑使用Jasmine或其他JS测试框架来测试视图模型

在我看来,在HTML中使用with:in是一种不错的方法

可以帮助使事情模块化并使依赖关系正常工作

允许您在视图模型之间进行发布/订阅通信,而无需将它们耦合在一起。这是在你提到的链接中。 您还可以通过在视图模型中传递回调函数进行通信


杜兰达尔是个好建议。我也对杜兰达尔的创始人罗布·艾森伯格的作品感兴趣,但截至2015年7月2日,它仍在测试阶段。这将使用标准化的SystemJs加载模块,并应使模块化视图模型更容易实现。

我同意Anish Patel的观点,这取决于关注点的分离,并将您的类保持在单一责任原则中,每个类只做一件事,我发现使用视图模型很难做到这一点。您可能还需要考虑使用Jasmine或其他JS测试框架来测试视图模型

在我看来,在HTML中使用with:in是一种不错的方法

可以帮助使事情模块化并使依赖关系正常工作

允许您在视图模型之间进行发布/订阅通信,而无需将它们耦合在一起。这是在你提到的链接中。 您还可以通过在视图模型中传递回调函数进行通信

杜兰达尔是个好建议。我还对Rob Eisenberg感兴趣,他是
Durandal,但截至2015年7月2日,它仍处于测试阶段。这将使用标准化的SystemJs加载模块,并使模块化视图模型更容易操作。

我仍然不清楚为什么你说Aurelia或Durandal可以帮助你更好地组织模块。@Alvaro我在考虑Auerlia的依赖项注入和加载系统,该系统更集成,而不必引入不同的pieces KO、RequireJs等都有优点,编写好的模块化代码是开发人员的责任,但有时框架可以让事情变得更简单。奥雷利亚的例子似乎也是很好的指导,虽然到目前为止我只浏览了Aurelia的表面。我仍然不清楚为什么你说Aurelia或Durandal可以帮助你更好地组织模块。@Alvaro我在考虑Auerlia的依赖注入和加载系统,它更集成,而不必引入不同的部分KO,RequireJs,两者都有优点,编写好的模块化代码是开发人员的责任,但有时框架可以使事情变得更容易。奥雷利亚的例子似乎也是很好的指导,尽管到目前为止我只浏览了奥雷利亚的表面。