一种方法是将您的实体(模块/集合)放在一个单独的模块中,并让您的各种模块请求它们。
实体模块示例(带有集合定义和请求处理程序):https ://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/entities/contact.js#L89
请求集合的示例(第 7 行):https ://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/list/list_controller.js#L7
在您的情况下,如果需要,可以重复使用相同的实例。但是请确保您有一些适当的机制来显示相当新鲜的数据(即在服务器上获取集合以获取最新数据)。
您可以使用 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
也可以(在某些情况下我已经这样做了),但它会导致紧密耦合,破坏封装,我不建议将它用于大型应用程序。