我有一个模板需要从两个不同的API端点(URL)接收数据:java -jar ...
和cart
。
我希望这两个端点充当一个模型或集合,以便我可以执行user
或.changedAttributes()
或sync
之类的操作。
我知道Backbone非常宽容,但我真的很失落。
我创建了一个codepen,看看到目前为止我做了什么:http://codepen.io/anything/pen/AXoBoa
期望的结果应该是这样的:
fetch
答案 0 :(得分:3)
您可以创建一个事件集中器来监听其注册的对象,并重新触发您捕获的事件。
像
这样的东西var aggregate = _.extend({}, Backbone.Events);
aggregate.register = function(m) {
var self = this;
this.listenTo(m, 'all', function() {
this.trigger.apply(this, arguments);
});
};
然后你会像这样使用它
aggregate.on('change', function(m) {
// do what you have to do when one of the models change
console.log('Change on ', m.toJSON());
});
aggregate.on('sync', function(m) {
//same thing for syncs
console.log('sync ', m.toJSON());
});
var m1 = new Backbone.Model({id: 1});
var m2 = new Backbone.Model({id: 2});
aggregate.register(m1);
aggregate.register(m2);
m1.fetch();
m2.set({data: 2});
答案 1 :(得分:1)
基于http://backbonejs.org/#Events的nikoshr略有不同的方法。基本思想是您设置一个可在两个视图中引用的事件对象。您可以根据需要为事件命名,并且可以触发和侦听对象可用的任何位置。
创建事件对象。在您的情况下,将其添加到您的主apphell对象。
appShell.Events = _.extend({}, Backbone.Events);
当用户在注销等用户视图中执行操作时,触发事件。
appShell.Events.trigger('user:logout');
在另一个视图中收听事件并根据它执行操作。
this.listenTo(appShell.Events, 'user:logout', this.doSomething);
在doSomething中放置逻辑,以便在另一个视图上执行您需要做的任何事情。