0

fetch() を使用せずにコレクションを作成していますが、JSON データは既に利用可能です。

this.displays = new Displays(jQuery.parseJSON($('#temp_json').html()));

そのコレクションの各モデルには、このコレクション内のこのモデルの位置である「位置」値の設定が必要です。

私がやろうとしているのは、イベントをキャッチすることです。最初のロードでは、各モデルが JSON から構築され、コレクションに追加されます。

次に、次のようなものを作成します。

theModel.set('position', this.length);

残念ながら、コレクションをバインドするイベントが見つかりません。また、このコレクションのモデルには、同じことを行う必要がある他のコレクション (...) が含まれています。

これは奇妙に思えるかもしれませんが、後で私の見解では次のようなことを実行するので、これを行う必要があります。

var prototypeNames = [this.model.get('display').get('position'), this.model.get('position')];

これが十分に明確であることを願っています。ありがとう!

4

3 に答える 3

1

-functionCollection.addは -event を起動します。これはadd-function で聞くことができonます。このイベントは、追加されたモデルと、いくつかの有用な属性 (モデルが追加されたインデックスなど) を含むオプション オブジェクトをパラメーターとして渡します。(ドキュメントはこちら

したがって、次のようにします。

collection.on('add', function(model, options) {
  model.set('position', options.index); 
});

add-event が渡すパラメーターについて詳しく知りたい場合は、それらをログに記録してください。既存のドキュメントはせいぜい不十分であるためです。

collection.on('add', function(model, options) {
  console.log(options); 
});

お役に立てれば!

于 2012-07-13T14:33:46.007 に答える
0

私のために働いた解決策:

backboneRelationalを使用しました。これは、実際のモデル リレーションシップを操作するときに最適です。コレクションの構築時にコレクションの各アイテムに対してトリガーされる「relational:add」を聞いています。

次に、アイテムにいくつかの値を設定し、ビューからリッスンできる新しいイベント「postAdd」をトリガーします。

window.Displays  = Backbone.Collection.extend({
    model: Display,
    initialize: function(data, options){
        this.on("relational:add", function(relModel){
            relModel.set('pos',this.indexOf(relModel));
            this.trigger('postAdd', relModel);
        }, this);
    },

});
于 2012-08-02T11:45:40.460 に答える
0

コレクションのデフォルトの「追加」実装をオーバーライドして、Backbone によってサイレンスされないカスタム イベントをトリガーできます。

var MyCollection = Backbone.Collection.extend({

  // Override the default 'add' implementation...
  add: function( models, options ) {

    // Call the default implementation first...
    Backbone.Collection.prototype.add.apply( this, arguments );

    // Fire our custom events on the models...
    while (model = models.shift()) {
      model.trigger('customAdd', model, this, options);
    }

    return this;
  }

});

モデルでトリガーされた「customAdd」イベントをリッスンできるようになりました。これは常にトリガーされます。silent = true の場合のイベントです。

結果として、アイテムが {silent: false} で追加されると、'add' と 'customAdd' の 2 つのイベントがトリガーされます。

この手法を使用して、新しいコレクションが最初に読み込まれ、すべてのモデルが作成されたときにイベントを発生させました。モデルが作成される前に初期化メソッドが呼び出されるため、「リセット」関数をオーバーライドして、モデルの作成時にコードの実行をトリガーする必要がありました。

于 2013-01-08T14:30:57.797 に答える