8

私がこれを持っているとしましょう:

view1.listenTo(model, 'change', function(){
    console.log('test1');
});

view2.listenTo(model, 'change', function(){
    console.log('test2');
});

「test1」が常に最初に印刷されることが保証されていますか?

4

3 に答える 3

8

リスナーが別の方法で動作する場合は知りません。確かにbackboneJsコードを読んだところ、listenToがコールバックを配列にプッシュすることがわかりました。イベントがトリガーされると、イベント コールバックを含む配列をループします。

var triggerEvents = function (events, args) {
    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
    switch (args.length) {
        case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;
        case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
        case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
        case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
        default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
    }
};

変わらないと安心できると思います。イベントは常にそのように機能します。イベント (this.model.trigger("change") または this.model.set("...)) が発生すると、定義された順序でコールバックが起動され、コールバックが起動されると、次のイベントで実行が続行されます。モデルチェンジのライン。

于 2013-10-01T15:38:31.550 に答える
2

現在の実装では、はいと言います。ただし、ドキュメントにはそれが記載されておらず、いつでも変更される可能性があります。

于 2013-10-01T14:16:57.187 に答える