2

私は多くのイベントを定義したバックボーン マリオネット ビューを持っています。itemview 内で発生しているイベントのログを保存したいと考えています。すべてのデータに監査データを呼び出す関数を記述したくありません。代わりに、すべての ItemView に適用されるように、バックボーン マリオネット イベント メソッドをオーバーライドしたいと考えていました。

私は使用してみました:

var originalTrigger = Backbone.Events.trigger;
Backbone.Events.trigger = function(){
  console.log("Event Triggered:");
  console.log(arguments.join(", "));
  originalTrigger.apply(this, arguments);
}

しかし、それは私には何もしません。助けてください

前もって感謝します

4

1 に答える 1

2

バックボーン ソースを確認すると、次のように表示されます。

_.extend(Model.prototype, Events, {

ここでModel、 とはそれぞれとEventsのローカル エイリアスです。つまり、監査でラップする前に、からのメソッドがモデル、コレクション、およびビューのプロトタイプにコピーされていることを意味します。Backbone.ModelBackbone.EventsBackbone.EventsBackbone.Events.trigger

triggerBackbone がロードされた後、他のもの (Marionette を含む) がロードされる前に、4 つすべてをラップする必要があります。このようなもの:

(function() {
    var trigger = Backbone.Events.trigger;
    var wrapper = function() {
        console.log("Event Triggered:");
        console.log(arguments.join(", "));
        trigger.apply(this, arguments);
    };
    Backbone.Model.prototype.trigger      = wrapper;
    Backbone.Collection.prototype.trigger = wrapper;
    Backbone.View.prototype.trigger       = wrapper;
})();

<script src="backbone.js">、前<script src="backbone.marionette.js">にトリックを行う必要があります。

于 2013-11-13T06:44:06.383 に答える