0

バスステーションの私のアプリケーションシナリオでは、各バスステーションには、通常の名前と一意のパブリックID番号と同様に、その一意の名前を識別する2つの方法があります。クライアントがサーバー側のメッセージと対話しているとき、クライアントは 2 つの異なるメッセージを受け取ります。最初のメッセージは駅を識別するためにバス名を使用し、2 番目のメッセージはバス駅を識別するために一意の ID 番号を使用します。

バス停のモデルを設計するとき、モデルに 2 つのインデックスを持たせることは可能ですか? 1 番目または 2 番目のメッセージを受信して​​も、ループして駅を見つけるのではなく、モデルをすぐに見つけてモデルを見つけることができます。 .

よろしくお願いします

4

1 に答える 1

0

これを実現する組み込みの方法はありませんが、コレクションのセカンダリ インデックスを作成するのは非常に簡単です。モデルの名前が決して変更されないと仮定します (一意の識別子であるため、変更すべきではありません)。

var StationCollection = Backbone.Collection.extend({
  initialize: function() {
    this.on('add',    this._onAdd,    this);
    this.on('remove', this._onRemove, this);
    this.on('reset',  this._onReset,  this);
    this._onReset();
  },

  getByName: function(name) {
    return this._byName[name];
  },

  _onAdd: function(model) {
    this._byName[model.get('name')] = model;
  },

  _onRemove: function(model) {
    delete this._byName[model.get('name')];
  },

  _onReset: function(model) {
    this._byName = {};
    this.each(this._onAdd);
  }
});

使用法:

var station = stations.getByName('name_of_station');

/テストされていないコード サンプル

于 2013-03-14T10:32:57.980 に答える