2013-07-23 64 views
0

是否有可能將問題變量傳遞到視圖渲染?傳遞數據到渲染Backbone.js

我試圖調用this.render在獲取成功的內部,但是我得到一個錯誤,大概是因爲這個。不在正確的範圍內。

app.AppView = Backbone.View.extend({ 
    initialize: function(){ 


     var inputs = new app.Form(); 

     inputs.fetch({ 

      success: function() { 

       var questions = inputs.get(0).toJSON().Questions; 

       app.validate = new Validate(questions); 
       app.validate.questions(); 



      }, // End Success() 

      error: function(err){ 
       console.log("Couldn't GET the service " + err); 
      } 

     }); // End Input.fetch() 

     this.render(); 

    }, // End Initialize 

    render: function(){ 
     el: $('#finder') 
     var template = _.template($("#form_template").html(), {}); 
     this.$el.html(template); 

    } 

回答

1

的成功回調被稱爲比你查看實例的不同對象。 解決它的最簡單的方法是添加這樣的事情你打電話inputs.fetch前:

var self = this; 

然後是成功回調中:

self.render(); 
1

我不是很確定你想要實現什麼,但是如果你的問題是從成功回調中調用渲染,你有兩個選擇,Function#綁定或分配一個自變量。

有關「自我」變量的更多信息,請參閱var self = this?。舉個例子:

var self = this; 

inputs.fetch({ 
    success: function() { 
     self.render(); 
    }, 
    ... 
}); 

你或許應該做的JavaScript作用域一些閱讀,比如「有效的Javascript」或搜索的主題(例如this MDN article)網上得到一個更好的想法發生了什麼那裏。

對於函數#bind(),請參見the MDN article about it。使用Backbone我建議你使用Underscore/LoDash的_.bind來代替它,以確保它在Function#bind()不受支持的情況下工作。

對於更高層次的概念,抓取操作看起來像屬於模型或路由器級別,而應該將作爲視圖模型的questions變量賦值。理想情況下,視圖不會執行數據處理/抓取,只會給出一個模型,該模型具有執行任何數據轉換所需的方法。

視圖甚至不需要擔心模型來自何處,這通常由路由器在單頁應用程序或頁面上的一些初始化代碼的情況下處理。