Backbone.js MarionetteJS:为不同布局使用具有两个或多个视图的集合
我有一个UI控制器,为了简单起见,您可以将其视为一个文件夹树,在其中可以通过复选框选择多个文件夹。选择将保存在模型中,“保存时”还会触发一些操作 出于可用性的原因,我们希望对同一个控制器使用两种不同的可视化。在某些布局中,两个UI控制器可以同时出现,在其他布局中,一次只能出现一个 如果能够跨2个UI控制器重用相同的集合实例,那就太好了 我可以在一个模块中很容易地做到这一点,但是我应该如何构造代码以使其在不同的模块中工作呢?我在考虑一个包含模型和集合类的模块,一个模块包含View1,另一个模块包含View2,但是哪里是放置集合实例并使其与世界其他地方通信的最佳位置Backbone.js MarionetteJS:为不同布局使用具有两个或多个视图的集合,backbone.js,marionette,Backbone.js,Marionette,我有一个UI控制器,为了简单起见,您可以将其视为一个文件夹树,在其中可以通过复选框选择多个文件夹。选择将保存在模型中,“保存时”还会触发一些操作 出于可用性的原因,我们希望对同一个控制器使用两种不同的可视化。在某些布局中,两个UI控制器可以同时出现,在其他布局中,一次只能出现一个 如果能够跨2个UI控制器重用相同的集合实例,那就太好了 我可以在一个模块中很容易地做到这一点,但是我应该如何构造代码以使其在不同的模块中工作呢?我在考虑一个包含模型和集合类的模块,一个模块包含View1,另一个模块包含
在木偶网中与两个或多个视图共享主干模型/集合实例的最佳实践是什么 一种方法是将实体(模块/集合)放在单独的模块中,并让各个模块请求它们 实体模块示例(带有集合定义和请求处理程序): 请求收集的示例(第7行): 在您的情况下,如果需要,可以重用相同的实例。但请确保您有适当的机制来显示合理的新数据(即在服务器上获取集合以获取最新数据) 您可以使用javascript的闭包机制来完成此操作,例如:
ContactManager.module('Entities', function(...){
var contacts = new Entities.ContactCollection(...);
contacts.fetch();
ContactManager.reqres.setHandler("contact:entities", function(){
return contacts;
});
ContactManager.commands.setHandler("contact:entities:update", function(){
return contacts.fetch();
});
});
然后,在应用程序中,您可以使用ContactManager.request(“contact:entities”)
获取联系人,并使用ContactManager.execute(“contact:entities:update”)
请求和命令之间的区别主要是语义上的:从应用程序的另一部分请求数据,而不是命令一些要完成的工作
使用请求响应可以更好地设计应用程序(松耦合、封装)。将数据附加到App.SomeNamespace.mycollection也会起作用(我在某些情况下已经这样做了),但它会导致紧密耦合,破坏封装,我不建议将其用于大型应用程序。它看起来相当不错。问题:在中,您正在创建新的集合对象。我在考虑跨两个模块重用同一个对象实例。我可以使用相同的机制来传递实际实例,并在模块的初始值设定项中创建对象。您认为这有什么问题吗?重用对象可以节省一些内存,并在每次修改集合时更新两个视图。另一个后续问题:在这种特定情况下,使用RequestResponse对象而不是简单地将集合实例分配给App.SomeNamespace.mycollection有什么好处?谢谢您需要更新。我的感觉是,当一个对象期望从另一个特定对象得到某样东西时,解耦是很困难的。如果您有多个工作人员,请求/响应机制可以提供一个抽象,从中可以完成工作,也可以添加一些负载平衡。但在一对一的情况下,我看不出有什么大的好处。唯一的一个是不必用名称来调用对象,我认为这可能是一个缺点,因为现在另一个工程师已经知道谁在执行该命令,因为该命令没有明确说明。我只是发现:除了令人震惊的标题之外,请很好地解释我的意思。你怎么认为?