2012-08-22 49 views
3

我想更新排名我從另一個視圖中傳遞的現有模型的屬性。但是,我收到錯誤Uncaught TypeError:Object#has no method'set'如何更新現有模型的屬性?

在視圖的初始化部分,我有:

this.collection = new tgcollection({model : this.options.model }); 

我定義一個函數的UpdateModel旨在更新屬性值:

updateModel: function(){ 
    var val= $("#textbox_id").val(); 
console.log(val); 
console.log(JSON.stringify(this.options.model)); 
JSON.stringify(this.options.model); 
this.options.model.set({"rank": val}); 
this.render(); 
// 
}, 

我要去哪裏錯了? 我可以在控制檯中看到值和模型及其以前的屬性值。

模型:

define(['jquery','underscore', 'backbone', 'deepmodel'], 
     function($,_, Backbone) { 
     var model = Backbone.DeepModel.extend({ 

     // Default attributes for the model. 
     defaults : { 
      id: null, 
       rank: null, 

     }, 

     initialize: function(){ 
      _.bindAll(this,"update"); 
        this.bind('change : cost', this.update); 
     }, 

     update: function(){ 
      console.log(this.get("cost")); 

     }, 
     // Remove this model from *localStorage*. 
     clear : function() { 
      this.destroy(); 
     }, 

    }); 
    return model; 

});

+0

我們可以看到'Backbone.Model'的代碼以及如何設置'options.model'嗎? –

+0

我們可以看到你使用'updateModel'-function的代碼嗎? – jakee

+0

編輯:增加功能更新和options.model – Amateur

回答

10

只是做

this.model.set({"rank": val}); 

,而不是

this.options.model.set({"rank": val}); 

一個視圖中的模型是通過this.model不this.options訪問。模型

0

我愛好神祕。根據我所看到的,這是我最好的猜測。問題可能甚至更遠。當你撥打:

this.collection = new tgcollection({model : this.options.model }); 

this.options.model可能不是你認爲它是。在這個實例化並傳入this.options.model的視圖之前查看視圖會很有幫助。順便說一句,模型和集合傳遞到視圖中,你總是可以縮短到this.model模型,集合和其他一些特殊的,他們直接附加到視圖一旦通過。

我假設在updateModel()以下似乎工作:

console.log(JSON.stringify(this.options.model)); 
JSON.stringify(this.options.model); 

錯誤快到了上set(),不高於該線。所以假設是你通過了一個模型。還是你?我的猜測是this.options.model實際上只是你模型的json對象。這也許可以解釋爲什麼當你將控制檯中的模型串聯起來時,「看到」了模型,但是當你調用set()時骨幹抗議。

而不是JSON.stringify來測試this.options.model只是試試console.log(this.options.model)。那麼,你不必真的測試。 Backbone在這個對象上找不到set()的事實是一個告訴故事的標誌。如果您在控制檯中看不到Backbone模型的複雜性 - 它不是模型。

另外,對於測試和調試特別是模型,我傾向於使用model.toJSON()函數作爲快速檢查,它是一個模型,我看到了我期望的屬性。

讓我們知道你是否有更多的線索。