2
$('button').click(function(){
  App.vent.trigger("box:change");
});

App.BoxView = Backbone.View.extend({
  initialize: function(options) {

    this.listenTo( App.vent, "box:change", this.alter ); // animate, etc.
  },

  ...

});

我有一个主要观点,我希望在(和/或)时做一些改变:

  1. 该事件由我所有的盒子处理
  2. 我所有的盒子都做了一些动画

无法解决这个问题(漫长的工作日)......请帮助=)更好的做法是什么?

我正在寻找这样的东西:

App.MainView = Backbone.View.extend({
      initialize: function(options) {

        // when all the events are complete
        this.listenTo( App.vent, "box:change" ).onComplete( this.rearrange_stuff );

        // when all the animations are complete
        this.listenTo( App.animationBuffer, "box:fadeOut" ).onComplete( this.rearrange_stuff );

      },

      ...

});

更新:如果我的应用程序中有很长的事件链 - 完成 - 事件 - 完成(不是循环),那么设置此队列的更好方法是什么?

4

2 回答 2

0

使用 jquery 我发现了承诺,只需要弄清楚我如何将它应用于我的所有视图..

http://api.jquery.com/promise/

(更新)

现在,我已经这样做了...... http://jsfiddle.net/Antonimo/YyxQ3/2/

App.vent = _.extend(Backbone.Events, {
    promise: function(name){
        if(typeof this._bills[name] === "undefined"){
            this._bills[name] = 0;
        } else {
            this._bills[name] ++;
        }
    },
    keepPromise: function(name){
        var that = this;
        setTimeout( function(){
            if(typeof that._checks[name] === "undefined"){
                that._checks[name] = 0;
            } else {
                that._checks[name] ++;
            }
            if(typeof that._bills[name] !== "undefined"){                    
                if( that._checks[name] >= that._bills[name] ){
                    that._checks[name] = 0; // reset
                    that._bills[name] = 0; // reset
                    that.trigger(name); // emit event
                }
            }

        }, 30);
    },
    _bills: {},
    _checks: {}
});

// usage:

alter: function() {
        App.vent.promise('some:event');
        // Animate, or not..
        App.vent.pay('some:event');
},
于 2013-02-19T08:43:00.330 回答
0

我一直在寻找解决方案,并在 Backbone 中找到了这个插件,它向 Backbone.Events 和其他 Backbone 对象添加了一个“triggerThen”方法,它允许您触发一个事件,然后在所有事件侦听器完成后调用一个函数。

https://github.com/bookshelf/trigger-then

如果有一个官方的 Backbone 解决方案会很好,尽管它在整个 Backbone.Events 框架中使用了 Promise。

于 2014-01-07T03:02:16.880 回答