Javascript 有什么好的插件或解决方法可以同步两个具有相同id的主干模型吗?
这是我的问题,在我的应用程序上,两个不同的视图用相同的id实例化了相同的模型。我希望这两个模型是相同的或是同步的(更改时触发事件)。有什么想法吗Javascript 有什么好的插件或解决方法可以同步两个具有相同id的主干模型吗?,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,这是我的问题,在我的应用程序上,两个不同的视图用相同的id实例化了相同的模型。我希望这两个模型是相同的或是同步的(更改时触发事件)。有什么想法吗 我看了一下主干关系,但人们对此抱怨太多。一个没有额外依赖关系的简单解决方案是以这样一种方式设计应用程序,即相关视图共享一个公共辅助集合,可能作为全局/模块作用域变量或作为构造函数参数传入。此集合将用作特定类型模型的确定存储,通过检查它,可以避免两次创建同一模型: var model = App.sharedCollection.get(id); if
我看了一下主干关系,但人们对此抱怨太多。一个没有额外依赖关系的简单解决方案是以这样一种方式设计应用程序,即相关视图共享一个公共辅助
集合,可能作为全局/模块作用域变量或作为构造函数参数传入。此集合将用作特定类型模型的确定存储,通过检查它,可以避免两次创建同一模型:
var model = App.sharedCollection.get(id);
if (!model) {
model = App.sharedCollection.add({id: id});
}
如果您喜欢预构建的解决方案,可以使用该库,它可以自动执行重复数据消除。使用这个主干插件,您只需使用Backbone.ModelFactory
而不是Backbone.Model.extend
来定义您的模型,就可以自动处理复制。下面是从自述文件
中提取的示例:
var User = Backbone.ModelFactory({
defaults: {
firstName: 'John',
lastName: 'Doe'
}
});
var user1 = new User({id: 1});
var user2 = new User({id: 1});
var user3 = new User({id: 2});
console.log(user1 === user2); // true
console.log(user3 === user1); // false
在更高的视图级别实例化模型,并将一个模型传递给两个视图。在视图中,参考此.model
,它将使另一个保持同步感谢您的回答,但在我的上下文中,这样做是不可能的。感谢您的回答。第一个想法是不实施这样的解决方案(但我认为我必须这样做)。插件Backbone.ModelFactory看起来不再需要维护,也不支持Backbone 1.x.x版本。如果您使用ModelFactory
并将其更新为Backbone 1.x,而不是自己滚动,可能会节省时间。其他有类似问题的人将感谢您。:)