4

我有一個模型偵聽事件「update:TotalCost」,當從屬於集合的任何模型M時,從(無關的)集合C觸發事件C變化。骨幹模型給this.set不是在Model.initialize中的函數

該事件在初始化方法中編碼如下。上接收I得到以下錯誤事件:

類型錯誤:this.set不是函數 this.set({ 「totalsale」:值});

CostModel = Backbone.Model.extend({  
    defaults: { 
    totalSale: 0, 
    totalTax: 0 
    }, 

    initialize: function(attrs, options) { 
    if(options) { 
     if(options.vent) { 
     this.vent = options.vent; 
     } 
    } 

    this.vent.on("update:TotalCost", function(value) { 
     this.set({ "totalSale": value}); **//ERROR HERE** 
    }); 
    } 
}); 

回答

3

你試過使用封閉?

CostModel = Backbone.Model.extend({  
    defaults: { 
    totalSale: 0, 
    totalTax: 0 
    }, 
    initialize: function(attrs, options) { 
    var self = this; 

    if(options) { 
     if(options.vent) { 
     this.vent = options.vent; 
     } 
    } 

    this.vent.on("update:TotalCost", function(value) { 
     self.set({ "totalSale": value}); 
    }); 
    } 
}); 
+0

謝謝 - 這個工程!我在上面使用閉包前檢查了螢火蟲,'這'實際上是窗口對象!我肯定假設'這'將成爲模型實例!如果沒有看到你如何實例化模型,很難說有什麼線索說明爲什麼要引用'this'現在是窗口 – 2013-05-03 16:12:34

+0

。如果你分享你的代碼,我會撥弄它並嘗試看看發生了什麼。 – 2013-05-03 18:46:53

+0

感謝您提供幫助,唉,更容易的說,然後做了很多其他依賴組件和佈局/區域,爲我做一個乾淨的切割可操作的代碼爲小提琴! :( – 2013-05-03 20:14:49

3

也許你想this指當前CostModel情況下,這樣做,你需要傳遞thisthis.vent.on調用,這樣的事件回調將在模型的上下文中執行:

this.vent.on("update:TotalCost", function(value) { 
    this.set({ "totalSale": value}); 
}, this); 
+0

我嘗試添加「本」是第三個。但仍然有同樣的錯誤。我是否需要使用任何_.bind調用才能工作?我對使用綁定的知識非常粗略。 – 2013-05-03 12:31:04

+0

您是否嘗試在事件主體中設置斷點並檢查「this」是什麼? – 2013-05-03 12:51:04

+0

是的,我剛剛檢查過螢火蟲,'這'實際上是窗口對象!我肯定假設'這'將成爲模型實例!關於爲什麼要引用'this'的任何線索現在是窗口 – 2013-05-03 15:42:22

0

此錯誤的另一個原因可能是,如果你嘗試不使用「new」關鍵字

0

使用Parse使用它的時候我得到這個神祕的錯誤,以創建一個新的模式。我:

Parse.User().current().escape("facebookID") 

...當我應該有:

Parse.User.current().escape("facebookID") 

刪除多餘的(),現在工作得很好。

10

極有可能你已經忘了你的模型前增加new例如你:

var user = UserModel(); 

// instead of 

var user = new UserModel(); 
0

另一個原因:

// render() method in view object 
setInterval(this.model.showName, 3000); 

// showName() method in model object 
showName: function(){ 
    console.log(this.get('name')); // this.get is not a function 
} 
1

這可能是由於「設置」作品模型不在對象。所以你可以先轉換你的對象到模型中,然後嘗試..

例如:

new Backbone.Model(your_object).set('val', var);