2015-08-09 105 views
0

我目前正在執行Backbone.js視圖的項目。我想在視圖中動態創建html標籤,但我迄今爲止所嘗試的所有內容都不起作用。是否有更新synax的骨幹新版本?因爲我看了一個教程,它對那個人很有用,但毫無疑問,這對我並不適用。這就是我現在所擁有的:backbone.js視圖中的tagName鍵

//My view for one book 

var BookView = Backbone.View.extend({ 

    model: new Book(), 
    tagName: function() { 
     return this.model.get('tr'); 
    },   
    initialize: function() { 
     this.template = _.template($('.books-list-template').html()); 
    }, 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    } 
}); 

我也試過這樣:

//My view for one book 

var BookView = Backbone.View.extend({ 

    model: new Book(), 
    tagName: 'tr',   
    initialize: function() { 
     this.template = _.template($('.books-list-template').html()); 
    }, 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    } 
}); 
+0

'tagName:'tr''應該在'this。$ el'中給你一個''。你的模板裏有什麼?當您嘗試使用您的視圖時會發生什麼? –

+0

@ muistooshort當我使用視圖時,表中什麼也沒有顯示,但是當我檢查控制檯中的元素時,json對象存在,但是沒有tr標記正在被創建或追加到表中。 – nodyor90z

+0

您是否在任何地方將視圖的「el」添加到您的「

」? –

回答

1

你的第二個例子應該的工作,但我們只是保持它的基本知識:

var ViewWithTRTagNameClass = Backbone.View.extend({tagName: 'tr'}); 
var viewWithTRTagName = new ViewWithTRTagNameClass(); 

console.log(viewWithTRTagName.render().el); // or alert, or $('body').append, etc. 

好的,這樣工作。

你的第二個例子更復雜,但基本上與此相同,因爲你的render函數返回this。所以,它應該有一個tr元素包裝內部內容。

順便說一下,ViewtagName是在您實例化時計算的 - 這發生在_ensureElement的內部。

如果您想要重新計算元素 - 比方說,在您的第一個render之前 - 您可以在適當的時間並在進行適當的檢查後調用view._ensureElement();