Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Backbone.js MarionetteJS:为不同布局使用具有两个或多个视图的集合_Backbone.js_Marionette - Fatal编程技术网

Backbone.js MarionetteJS:为不同布局使用具有两个或多个视图的集合

Backbone.js MarionetteJS:为不同布局使用具有两个或多个视图的集合,backbone.js,marionette,Backbone.js,Marionette,我有一个UI控制器,为了简单起见,您可以将其视为一个文件夹树,在其中可以通过复选框选择多个文件夹。选择将保存在模型中,“保存时”还会触发一些操作 出于可用性的原因,我们希望对同一个控制器使用两种不同的可视化。在某些布局中,两个UI控制器可以同时出现,在其他布局中,一次只能出现一个 如果能够跨2个UI控制器重用相同的集合实例,那就太好了 我可以在一个模块中很容易地做到这一点,但是我应该如何构造代码以使其在不同的模块中工作呢?我在考虑一个包含模型和集合类的模块,一个模块包含View1,另一个模块包含

我有一个UI控制器,为了简单起见,您可以将其视为一个文件夹树,在其中可以通过复选框选择多个文件夹。选择将保存在模型中,“保存时”还会触发一些操作

出于可用性的原因,我们希望对同一个控制器使用两种不同的可视化。在某些布局中,两个UI控制器可以同时出现,在其他布局中,一次只能出现一个

如果能够跨2个UI控制器重用相同的集合实例,那就太好了

我可以在一个模块中很容易地做到这一点,但是我应该如何构造代码以使其在不同的模块中工作呢?我在考虑一个包含模型和集合类的模块,一个模块包含View1,另一个模块包含View2,但是哪里是放置集合实例并使其与世界其他地方通信的最佳位置


在木偶网中与两个或多个视图共享主干模型/集合实例的最佳实践是什么

一种方法是将实体(模块/集合)放在单独的模块中,并让各个模块请求它们

实体模块示例(带有集合定义和请求处理程序):

请求收集的示例(第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有什么好处?谢谢您需要更新。我的感觉是,当一个对象期望从另一个特定对象得到某样东西时,解耦是很困难的。如果您有多个工作人员,请求/响应机制可以提供一个抽象,从中可以完成工作,也可以添加一些负载平衡。但在一对一的情况下,我看不出有什么大的好处。唯一的一个是不必用名称来调用对象,我认为这可能是一个缺点,因为现在另一个工程师已经知道谁在执行该命令,因为该命令没有明确说明。我只是发现:除了令人震惊的标题之外,请很好地解释我的意思。你怎么认为?