4

私は、バックボーンのドキュメントと一緒に知っている誰かが作成したアプリを見て、バックボーンを学ぼうとしています。このアプリには、バケットモデルと会社モデルがあります(つまり、会社をバケットに入れます)。このビットには、私が不明確なことが1つあります。それは、メソッドの使用trigger方法です。

バックボーンのドキュメントには、次のように書かれていますtrigger

引き金object.trigger(event, [*args])

指定されたイベント、またはスペースで区切られたイベントのリストのコールバックをトリガーします。トリガーする後続の引数は、イベントコールバックに渡されます。

私が見ているコードでtriggerは、次のように呼ばれています。

this.trigger("add:companies", Companies.get(companyId));

2つの質問:

  1. event私は会社を経営しているaddと思いますが、以下のコードのどの時点で実際にそれが起こりますか?this.set({ "companies": arr }, { silent: true });実行されるのはいつですかthis.save();、それとも実行されるのはいつですか(または他の何か)?

  2. オプションの引数の場合Companies.get(companyId)、実際にはどの関数に渡されますか?

元のコードからの抜粋

window.Bucket = Backbone.Model.extend({
  defaults: function() {
    return {
      companies: []
    };
  },

  addCompany: function(companyId) {
    var arr = this.get("companies");
    arr.push(companyId);
    this.set({ "companies": arr }, { silent: true });
    this.save();
    this.trigger("add:companies", Companies.get(companyId));
  },

  // ...
4

1 に答える 1

9

バケットのプロパティは、説明したメソッドcompaniesで更新されています。addCompany例の注釈付きバージョンは、何が起こっているかを示しています。

  // 1. get array of companies currently included in the bucket:
  var arr = this.get("companies");

  // 2. add a company to the array
  arr.push(companyId);

  // 3. replace the bucket's company list with the array,
  //    suppressing validation and events:
  this.set({"companies": arr}, {silent: true});

  // 4. save the bucket:
  this.save();

trigger実際にはモデルに影響を与えていません。これは、会社が追加されたことをアプリケーションの他の部分に知らせるための方法にすぎません。onバケットモデルを使用して、向きを変えて別の場所でキャッチすることができます。

var bucket = new window.Bucket();

// do stuff

bucket.on('add:companies', function(company) {
  alert('a new company has been added to the bucket.');
});
于 2012-04-15T02:45:31.987 に答える