IDが事前に入力された新しいモデルをサーバーに追加したいときに、.save()が不正なisNew()値を報告する原因となる、idAttributeの問題が発生していました。そのため、モデルをオフにしてmodel.idを設定しました。手動で。
これが私の見解です:
RecordListItemView = Backbone.View.extend({
initialize:function () {
var record = this.model.attributes;
if (record.user_id) {
this.model.id = parseInt( record.user_id );
record.id = parseInt( record.user_id );
// Added this so ID would show up in model and .attributes
}
this.model.bind("change", this.render, this);
this.model.bind("destroy", this.close, this);
},
render:function (eventName) {
$(this.el).html(this.template(this.model));
console.log(this);
return this;
}
});
この時点では、collection.get(id)を使用してレコードを取得することはできませんが、collection.getByCid(cid)を使用して取得することはできます。
これが私のconsole.log出力です:
d
$el: e.fn.e.init[1]
cid: "view36"
el: HTMLLIElement
model: d
_callbacks: Object
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object
id: 15
user_id: "15"
user_name: "Test"
__proto__: Object
changed: Object
cid: "c8"
collection: d
id: 15
__proto__: x
options: Object
__proto__: x
idフィールドを含めるようにデータベースを変更せずにcollection.get(id)を修正する方法はありますか?(現在、pkとしてuser_idを使用しています)
ベンジャミンコックスによって以下に投稿されたように:(不要なものとしてparseInt()が削除されました)
交換
this.model.id = record.user_id;
と
this.model.set({ id: record.user_id });
..モデルのchangeイベントをバイパスして、コレクションのinternal_byId[]配列を更新しないようにするため。
両方をテストした後、muを使用して終了しました。短すぎるparse
提案です。
parse: function(response) {
return {
id: response.user_id,
user_id: response.user_id,
user_name: response.user_name
};
}