5

これまでのところ、バックボーンリレーショナルはかなりうまく機能しています。私は人間関係と逆の関係を十分に確立しています (以下を参照)。モデル インスタンスを最初に呼び出すと.fetch()、配列はモデルに完全に解析されます。Countrynomineesnominee

ただし、後で再度呼び出すと、データが変更されても (たとえば、投票数が増加したなど) .fetch()、これらの関連モデルは更新されません。nominee基本的に、Backbone の.set()方法は最初は関係を理解するが、その後は理解しないようです。

国別モデル

var Country = Backbone.RelationalModel.extend({

    baseUrl : config.service.url + '/country',

    url : function () {
        return this.baseUrl;
    },

    relations : [
        {
            type : Backbone.HasMany,
            key : 'nominees',
            relatedModel : Nominee,
            collectionType : Nominee_Collection,
            reverseRelation : {
                key : 'country',
                includeInJSON : false
            }
        }
    ]
});

JSON レスポンスcountry.fetch()

{
  "entrant_count" : 1234,
  "vote_count" : 1234,
  "nominees" : [
    {
      "id" : 3,
      "name" : "John Doe",
      "vote_count" : 1,
      "user_can_vote" : true
    },
    {
      "id" : 4,
      "name" : "Marty McFly",
      "vote_count" : 2,
      "user_can_vote" : true
    }
  ]
}

いつものように、どんな助けでも大歓迎です。

4

1 に答える 1

2

したがって、backbone-relational はリレーションを自動的に更新することを特に控えており (updateRelationsメソッドを参照)、単にrelational:change:nomineesモデルがターゲットにできるイベントを発行しているように見えます。ただし、関連するモデルをプログラムで更新する場合は、updateRelations次のようにメソッドを変更するだけです。

Backbone.RelationalModel.prototype.updateRelations = function( options ) {
    if ( this._isInitialized && !this.isLocked() ) {
        _.each( this._relations || [], function( rel ) {
            // Update from data in `rel.keySource` if set, or `rel.key` otherwise
            var val = this.attributes[ rel.keySource ] || this.attributes[ rel.key ];

            if ( rel.related !== val ) {
                this.trigger( 'relational:change:' + rel.key, this, val, options || {} );

                // automatically update related models
                _.each(val, function (data) {                           
                    var model = rel.related.get(data.id);
                    if (model) {
                        model.set(data);
                    } else {
                        rel.related.add(data);
                    }
                });
            }
        }, this );
    }
};

(これは、コレクションからのモデルの削除、既存のモデルの更新のみ、およびコレクションへの新しいモデルの追加を処理しないことに注意してください)

于 2012-10-31T18:04:46.450 に答える