2016-03-20 294 views
-1

我想用Backbonejs做一個應用程序,這是我第一次使用前端Javascript框架,除了JQuery。骨幹 - 渲染集合

我還沒有理解渲染是如何工作的。

我的實施例:

render: function() { 
 

 

 
      var events = this.collection.fetch({ 
 

 
       success: function (model, response) { 
 

 
        console.log("Response is " + response); 
 

 
        var events = model.toJSON(); 
 

 
        console.log(events.length); 
 
        console.log(model.toJSON()); 
 

 
        return model.toJSON(); 
 

 
       }, 
 
       error: function(){ 
 
        console.log("Errore during data fetch"); 
 
       } 
 
      }); 
 

 

 
      this.$el.html(this.template({events:this.collection.toJSON()})); 
 

 
      console.log("Event list: " + events.length); 
 

 
},

上面的代碼是我的視圖的呈現回調。 在成功集合獲取中,我從API獲取json格式的數據,併成功將其記錄在控制檯上,但在獲取之外,我沒有這些數據,而且我的視圖集合似乎只是一個空的Backbone對象。

有人可以解釋我做錯了什麼以及渲染是如何工作的?

恩里科:)

+0

jQuery不是一個框架...它是一個庫..你是怎麼想出這個代碼的..?你知道抓取是異步的嗎? 'var events = this.collection.fetch'或什麼獲取方法實際返回..? '成功:函數(模型,響應){'或什麼將是獲取方法成功回調的第一個參數..?這是所有有據可查的文件...請閱讀文件。 'return model.toJSON();'成功回調返回的用途是什麼......? –

回答

0

那麼,什麼render基本上不只是注入一些HTML代碼到視圖的el(元素)。 這可以通過使用模板引擎完成,例如handlebarsmustache,或者只使用通用主幹(實際上是下劃線)模板,就像您在代碼中一樣。

我們通常會做的是初始化視圖的方式,它聽它的模型附加到,或收集在你的情況。 在render中獲取數據並不是一個好習慣,因爲它只應該使用已經獲取的數據。

所以,你可以做什麼,是初始化您的看法是這樣的:

var View = Backbone.View.extend({ 
    initialize : function(){ 
    this.listenTo(this.collection, "change", this.render); 
    }, 
    redner : function(){ 
    this.$el.html(this.template({events:this.collection.toJSON()})); 
    } 
}); 

在這段代碼中,視圖監聽所有連接到它收集發生的變化。當我說更改時,我的意思是更改集合中的任何模型,包括第一次提取集合的時間。 因此,每當集合發生變化時,listenTo方法將觸發render方法,並且整個視圖將重新呈現。 這是首次獲取集合時發生的情況。

併爲取自己?一旦您將change事件綁定到視圖,您可以在應用程序中的任何位置抓取它,而不一定在視圖內。