backbone.js +全局事件调度器+ require.js:怎么做?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

我有许多骨干模型,按照集合进行组织,并连接到相应的视图和/或视图集合。其中一些不属于同一集合的模型需要触发另一个模型。

然而,我使用了require.js,这似乎违背了将调度器/聚合器附加到应用程序的命名空间对象的想法,我在这里错了吗?

所以我的问题是:使用require.js如何让一些不同的主干模型触发一个将由另一个模型处理的事件?

提问于
用户回答回答于

你所要做的就是定义一个模块来创建一个事件监听器的单例,并且在你想要触发一个事件或者监听这个事件的模块中需要这个对象。

假设你有app / channel.js

define(['backbone', 'underscore'], function (Backbone, _) {
    var channel = _.extend({}, Backbone.Events); 
    return channel;
});

然后,你可以:

require(['app/channel'], function (channel) {
    channel.on('app.event', function () {
        console.log('app.event');
    });
});
require(['app/channel'], function (channel) {
    channel.trigger('app.event');
});
用户回答回答于

我们使用Marionettes app.vent(这是我们应用程序的全球事件发送器),并且需要js,并且它运行得非常好。

应用

define(, function(){
  return new Backbone.Marionette.Application();
})

Model1

define(['app'], function(app){
  return Backbone.Marionette.Model.extend({
    initialize: function(){
      this.bindTo('app.vent', 'create:model2', this.toSomething, this);
    }
  })
})

MODEL2

define(['app'], function(app){
  return Backbone.Marionette.Model.extend({
    initialize: function(){
      app.vent.trigger('create:model2', this);
    }
  })
})

所属标签

可能回答问题的人

  • Richel

    9 粉丝0 提问3 回答
  • 无聊至极

    6 粉丝504 提问2 回答
  • 学生

    8 粉丝476 提问2 回答
  • 风华一代

    3 粉丝469 提问2 回答

扫码关注云+社区

领取腾讯云代金券