2013-05-21 155 views
0

當我使用骨幹的toJSON這樣的模型的方法,包括:骨幹的toJSON不渲染

this.$el.html(this.model.toJSON()); 

它不呈現模型到視圖根元素(多個屬性)。

但是當我從模型中獲得一個屬性時,就像這樣;

this.$el.html(this.model.get("city")); 

它被正確渲染。

另外,當我在第一種情況下使用模板(toJSON) - 它顯示正常。

this.$el.html(this.template(this.model.toJSON()); 

這是爲什麼?

由於

回答

2

因此,基本上this.template將(在大多數情況下)html template的編譯版本,你認爲。

它將在其中佔位符,並將參數與模板中佔位符相同的鍵。例如(把手模板),

<section id="{{id}}"> 
    <header>{{header_text}}</header> 
</section> 

考慮到上述代碼作爲模板,在編譯時,並將其存儲在this.template,它返回一個函數,它接受一個json對象作爲參數,所以現在this.template是一個功能。

你可以這樣調用它下面,

var html_text = this.template({ 
    id : "main_content", 
    header_text : "Hi Welcome !!" 
}); 

this.$el.html(html_text); 

執行後,el的內容將是

<section id="main_content"> 
    <header>Hi Welcome !!</header> 
</section> 

所以當你做this.$el.html(this.template(this.model.toJSON());,它實際上產生了所需的json參數this.template方法適合你,因此工作正常。

而且如Loamhoof所述,在this.$el.html(this.model.get("city"));中,您將使用html方法,該方法將根據模型的屬性值設置el的html內容。

4
this.$el.html(this.model.toJSON()); 

你使用jQuery的html方法,它需要一個字符串(或DOM元素,或一個jQuery元件),以顯示一個JSON對象。

this.$el.html(this.template(this.model.toJSON()); 

這裏,我們使用一個template方法,我認爲,走的是一條JSON對象來評價一個模板,將返回一個字符串。 html方法接收該字符串並顯示它。

this.$el.html(JSON.stringify(this.model.toJSON())); 

這將顯示this.model.toJSON()結果(但不會做一樣的使用方法template)。