2013-05-21 158 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)。