2011-11-06 97 views
1

我正在開發一個部分基於Backbone.js todo example app的應用程序。一切都很好,直到我嘗試添加編輯功能。我發現的是一些奇怪的行爲。主幹和改變模型屬性

我有一種形式,它創建新的模型對象,並將其添加到集合。當創建新模型(綁定到「添加」事件)時,還會創建新視圖並將其添加到dom中。就像在該TODO應用程序,它的工作原理。

現在我嘗試添加編輯功能。我在視圖對象方法中創建輸入元素並嘗試「提交」更改。我嘗試通過使用view.model.set -method簡單地改變模型屬性來實現這一點。這有效,但一些奇怪的事件被觸發。這可能很好,因爲我想在模型更改時再次渲染視圖。

主要問題:在我看來(工作一個)對象有渲染方法包含這個調試行:'console.log(this)'。當視圖對象首次被窗體創建時,該行輸出正確的對象。當我嘗試編輯模型併爲其設置新值時,調試將打印完全不同的對象。這沒有用,渲染失敗。

我希望這些例子足夠了。

主要觀點:

this.myCollection.bind('add', function(model){ 
    var myView= new myViewRow({ 
     model: model 
    });   
    $("#container").find('tbody').append(myView.render().el); 
}, this); 

和MyView的:

render: function() { 
    console.log(this); 

    var data = this.getAsArray(); 
    $(this.el).html(content); 
    return this; 
} 

任何提示什麼,我做錯了什麼?什麼事件集方法觸發,爲什麼我的渲染方法是在錯誤的對象之後?

+1

你能發佈完整的視圖嗎? –

回答

1

在骨幹視圖的初始化方法試試這個:

_.bindAll(this, "render"); 

Backbone.js FAQ對此的解釋。在Backbone視圖中,這是一種常見做法,以確保this變量指向當前函數作用域中定義的View對象,正如人們通常希望的那樣。

+0

這沒有把戲。謝謝! – jaylinen

0

當您綁定聽FOT更改事件,您必須將偵聽器函數綁定到當前視圖http://documentcloud.github.com/backbone/#FAQ-this

+0

這很好,可能和我的問題有關。無論如何,我在我的視圖初始化方法中有這條線:this.model.bind('change',this.render,this) – jaylinen