簡體   English   中英

如何設置Backbone Model.idAttribute?

[英]How to set Backbone Model.idAttribute?

我正在使用帶骨干的MongoDb / Lithium php框架。

我希望我的所有模型ID和idAttribute(s)與我的數據庫文檔id(即'_id'/ mongoid)相同

問題:

  1. 當我打印model.idAttribute的值時,它顯示為只是_id。
  2. 當我打印model.get('idAttriubte')時,它是未定義的。
  3. 如何確保將idAttribute設置為與數據庫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM