2014-03-12 19 views
0

我在初始化Backbone模型時遇到了一些問題,其中一些數據來自Jackson如何丟棄/拒絕骨幹模型中的額外屬性initialize()

接收到的數據碰巧有一個listPropertyValue,它最初是對象的Java List。在做initialize()的方法時,我把它做成一個Backbone集合,沒有什麼問題。

但最終的SomeModel構造函數還添加了一個名爲listPropertyValue的屬性作爲JavaScript數組,我不想這樣做。

我該如何放棄或拒絕這個數組,以及哪種方法可以做到這一點?

這裏是我的代碼:

var SomeModel = Backbone.Model.extend({ 

    defaults : { 
    id:null, 
    name:'', 
    order:null, 
    isRequired:null, 
} 

initialize : function(options) { 
    if(options.listPropertyValue !== undefined) { 
     this.set('collectionPropertyValue', new PropertyValueCollection(options.listPropertyValue)) 
    } 

    // I thought of doing this. Don't know if it's the right thing to do 

    // this.unset('listPropertyValue', { silent: true }); 

} 

我擔心的不僅是如何做到這一點,但如何做一個適當的骨幹道路。

+0

它看起來像parse()解決方案根本不起作用。從服務器檢索數據時甚至不通過parse()方法。 雖然它在initialize()中使用unset()方法。它似乎工作,但最終我找到相同的,當我從AJAX檢索一個大數據列表。 – madtyn

回答

0

我終於做到了。我使用的是我發佈的相同代碼,但直到我使用版本1.1.2的骨幹(我使用的是1.0.0或類似的版本)才運行。

var SomeModel = Backbone.Model.extend({ 

    defaults : { 
     id:null, 
     name:'', 
     order:null, 
     isRequired:null, 
    } 

    initialize : function(options) { 
     if(options.listPropertyValue !== undefined) { 
      this.set('collectionPropertyValue', new PropertyValueCollection(options.listPropertyValue)); 
     } 

     this.unset('listPropertyValue', { 
      silent : true 
     }); 
    } 
} 
1

(我假設你從API某處獲得這個數據。)

你應該在你的模型中定義一個parse方法只返回數據你感興趣:

parse: function(response){ 
    return _.omit(response, "listPropertyValue"); 
} 

Backbone將爲您完成剩下的工作:每次從數據接收到API時,它都會自動調用parse

欲瞭解更多信息:http://backbonejs.org/#Model-parse

+0

我從Java控制器中獲取_options_數據對象,並使用Jackson將其從Java轉換爲JSON。 我正在嘗試這個,我會讓你知道它是如何工作的。 – madtyn

+0

看來它不工作:-( – madtyn

+0

parse()不會被調用,因爲數據來自AJAX請求,而不是fetch()或save()。 這必須在initialize()中完成。 – madtyn