0

ここでは Backbone.js Model - Contact と Collection - Contacts を Model として持っています。2 つのビューがあり、1 つはコレクションを使用してすべての連絡先を一覧表示し、もう 1 つはモデルを直接使用して 1 つの連絡先を表示します。しかし、モデルを直接使用している場合、コレクションで「変更」イベントを使用しているときに「変更」イベントを発生させることができます (モデルの「すべての」イベントでさえも) 発生しません。コレクションで機能させるために、ここで追加のバインドが不足していますか?

var Contact = Backbone.Model.extend({ 
    defaults: {
        id: 0,
        urlDisplayPicBig: '',
        urlDisplayPicSmall: ''
    },
    initialize: function () {
        this.bind('change', this.doSomething);
    },
    generateUrls: function () { //earlier doSomething()
        ...
    }
    ...
});

var Contacts = Backbone.Collection.extend({ 
    model: Contact,
    ...
});

更新 コレクションと単一モデルの両方のインスタンスを使用している間、generateUrls() を実行して、モデルの「id」に基づいて urlDisplayPicBig と urlDisplayPicSmall を更新する必要があります。

4

1 に答える 1

2

fetchコレクションで行う場合:

コレクションはリセットされます

そしてそれは

コレクションをモデルの新しいリスト(または属性ハッシュ)に置き換え、最後に単一の"reset"イベントをトリガーします。[...]引数なしでresetを使用すると、コレクションを空にする方法として役立ちます。

したがって、fetchコレクションのaは、現在コレクションにあるすべてのモデルを削除し、それらを新しいモデルインスタンスに置き換えます。"change"イベントは発生せず、イベントは1つだけです"reset"

fetchモデルでを行う場合:

サーバーの"change"状態が現在の属性と異なる場合、イベントがトリガーされます。

したがって、呼び出しは、サーバーからデータを手動でロードすることと、モデルを変更するためにfetch呼び出すこととほとんど同じです。set


概要:イベントCollection#fetchはトリガーされず、イベントのみがトリガーされます。何かが変更された場合にイベントをトリガーします。"change""reset"Model#fetch"change"


新しいモデルインスタンスを作成するときにいくつかの新しい属性を追加したいだけの場合は、を使用して着信JSONに新しい属性を追加できますModel#parse

于 2012-05-07T04:40:05.307 に答える