当我想使用预先填充的 ID 向服务器添加新模型时,我遇到了 idAttribute 问题,导致 .save() 报告错误的 isNew() 值。这导致我将其关闭并设置 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
有没有办法修复 collection.get(id) 而无需更改我的数据库以包含 id 字段?(目前使用user_id作为pk)
正如本杰明·考克斯 (Benjamin Cox) 在下面发布的那样:(将 parseInt() 删除为不必要的)
代替
this.model.id = record.user_id;
和
this.model.set({ id: record.user_id });
.. 避免绕过模型的更改事件,从而更新集合的 internal_byId[] 数组。
在测试了两者之后,我最终使用了 mu is too short 的parse
建议..
parse: function(response) {
return {
id: response.user_id,
user_id: response.user_id,
user_name: response.user_name
};
}