0

最初のページの読み込み時に、バックボーンアプリのすべての重要なデータをブートストラップしています。これは主にコレクションです。呼び出していた問題でしばらく立ち往生していましたが、渡されたIDの属性を持つモデルが存在することを知っていたのcollection.get(id)に戻ってきました。undefinedID

次に、コンソールでコレクションを調べたところ_byId、モデルIDの配列を含むはずの配列が空であることがわかりました。

以下のコンソール印刷から、コレクションにモデルがあり、それらのモデルにID属性があることがわかります。

window.campaigns
child
  _byCid: Object
  _byId: Object
    __proto__: Object
  _callbacks: Object
  length: 32
  models: Array[32]
  models: Array[32]
  0: child
    _callbacks: Object
    _escapedAttributes: Object
    _pending: Object
    _previousAttributes: Object
    _silent: Object
    attributes: Object
    DateCreated: "23/05/2012"
    DateScheduled: ""
    DateSent: ""
    Description: null
    From: null
    ID: 1
    IsAllowed: false
    Message: null
    Name: "Some name"
    __proto__: Object
    changed: Object
    cid: "c0"
    collection: child
    __proto__: ctor
  1: child
  2: child
  3: child
  4: child
  5: child
  length: 6
  __proto__: Array[0]
  __proto__: ctor

ページの読み込み時にインデックスページに書き込まれるJSONオブジェクトの配列を使用してデータをブートストラップしています。私はそれがあなたがしなければならなかったすべてであると仮定しました、そしてBackboneは'ID'と呼ばれるプロパティがモデルのIDであると仮定し、それに応じて解釈します。

私はこれを考えるのが間違っていますか/私はこれを正しくやっていますか?

4

1 に答える 1

6

私はあなたのモデルでこれを見ます:

ID: 1

JavaScriptは大文字と小文字を区別するためidID異なるものです。バックボーンはデフォルトでを探しておりid、については何も知りませんID

を使用するidと、すべてが箱から出して動作します。

​var M = Backbone.Model.extend({});
var C = Backbone.Collection.extend({
    model: M
});
​var c = new C([
    { id: 1, str: 'where'    },
    { id: 2, str: 'is'       },
    { id: 3, str: 'pancakes' },
    { id: 4, str: 'house?'   }
]);

デモ: http: //jsfiddle.net/ambiguous/nzLEC/

idまたは、次を使用して、モデルに別の属性を使用するように指示することもできますidAttribute

idAttribute model.idAttribute

モデルの一意の識別子がid属性の下に保存されます。別の一意のキーを使用するバックエンド(CouchDB、MongoDB)と直接通信している場合は、idAttributeそのキーからに透過的にマップするようにモデルを設定できますid

説明の最初の文は、次のように表現したほうがよい場合があります

モデルの一意の識別子は、id プロパティの下に保存されます。

JavaScriptオブジェクトのプロパティとBackboneモデルの属性の間の一般的な混乱を避けるため。

例えば:

var M = Backbone.Model.extend({
    idAttribute: 'ID'
});
var C = Backbone.Collection.extend({
    model: M
});
var c = new C([
    { ID: 1, str: 'where'    },
    { ID: 2, str: 'is'       },
    { ID: 3, str: 'pancakes' },
    { ID: 4, str: 'house?'   }
]);

デモ: http: //jsfiddle.net/ambiguous/3NhGV/

于 2012-05-29T16:15:12.113 に答える