[英]How to set Backbone Model.idAttribute?
我正在使用帶骨干的MongoDb / Lithium php框架。
我希望我的所有模型ID和idAttribute(s)與我的數據庫文檔id(即'_id'/ mongoid)相同
問題:
這是模型類:
window.app.IHoliday = Backbone.Model.extend({
urlRoot: HOLIDAY_URL,
idAttribute: '_id',
id: '_id',
// Default attributes for the holiday.
defaults: {
},
initialize: function(props) {
},
});
這是視圖代碼,在模型上調用fetch。 文檔的mongoid作為隱藏輸入(holiday_id)傳遞給此頁面。
console.log('Holiday URL:' + HOLIDAY_URL );
var Holiday = new window.app.IHoliday({ _id: holiday_id });
console.log('HOLIDAY before fetch: \n' + JSON.stringify(Holiday));
Holiday.fetch(
{
success: function(){
//alert('Holiday fetched:' + JSON.stringify(Holiday));
console.log('HOLIDAY Fetched: \n' + JSON.stringify(Holiday));
console.log('Holiday name:' + Holiday.get('holiday_name'));
console.log('Holiday id:' + Holiday.id);
console.log('Holiday idAttribute:' + Holiday.idAttribute);
console.log('Holiday idAttribute:' + Holiday.get('idAttribute'));
}
});
來自firebug控制台的輸出:
HOLIDAY before fetch:{"_id":"50bcaab24fbe3dfc1700000b"}
GET http://localhost:8080/li3/holidays/load/50bcaab24fbe3dfc1700000b 200 OK
HOLIDAY Fetched:
{"_id":"50bcaab24fbe3dfc1700000b","holiday_name":"eeeeeeeeeeeeeeeee","description":"","star_rating":"3","holiday_type":"family","rooms":"1","adults":"2","child":"0","emails":""}
Holiday name:eeeeeeeeeeeeeeeee
Holiday id:50bcaab24fbe3dfc1700000b
Holiday idAttribute:_id
Holiday idAttribute:undefined
編輯:以下工作...在模型類中注釋id的條目后:
window.app.IHoliday = Backbone.Model.extend({
urlRoot: HOLIDAY_URL,
//id: '_id',
idAttribute: '_id',
// Default attributes for the holiday.
defaults: {
},
initialize: function(props) {
},
來自Backbone 文檔 :
如果您直接與使用不同唯一鍵的后端(CouchDB,MongoDB)進行通信,則可以將Model的idAttribute設置為從該鍵透明地映射到id。
所以idAttribute
只是告訴你的Model類,任何具有與idAttribute
值相同的鍵的屬性也應該被復制到id
。 在Backbone 源中 ,這可以通過以下方式完成:
if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];
基本上,如果您嘗試設置與idaAttribute
同名的屬性,則該值也會復制到id
。
所以回答你的問題: idAttribute
不存儲id
,但它存儲了包含id
的屬性的名稱
idAttribute
包含將用作id的類成員的名稱。 因此,如果您使用idAttribute: '_id'
id idAttribute: '_id'
,Backbone將使用成員_id
作為您的類的ID。
如果您想使用屬性holiday_id
作為您的類IHoliday
的ID,您可以嘗試:
window.app.IHoliday = Backbone.Model.extend({
urlRoot: HOLIDAY_URL,
idAttribute: 'holiday_id',
// Default attributes for the holiday.
defaults: {
},
initialize: function(props) {
},
});
var Holiday = new window.app.IHoliday({holiday_id : holiday_id });
Backbone將使用holiday_id
屬性而不是常規id
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.