我刚刚开始将backbone.js用于我正在进行的项目。
我目前在模型,集合和视图方面都按照我想要的方式设置了所有内容。我从服务器上的REST应用程序获取数据。
客户端可以登录应用程序;目前我正在将该信息提供给underscore.js模板,但我希望模板是动态的。根据客户的不同,有些选项会有所不同。
我的感觉是,让模板进行特定的ajax调用以获取动态信息会破坏使用backbone.js的目的。是否有可能让骨干和下划线从xhr请求加载模板?或者有更好的方法来做到这一点吗?
感谢您的帮助。
答案 0 :(得分:2)
就Underscore而言,模板只是一个字符串,因此您可以从任何地方获取该字符串。所以你可以这样做:
render: function() {
var that = this;
$.get('/some_template', function(tmpl) {
that.$el.html(_.template(tmpl, that.model.toJSON()));
});
return this;
}
在现实生活中,您可能希望将其隐藏在一个简单的缓存对象后面,该对象仅从服务器获取一次特定模板。
或者,您可以让服务器代码确定需要哪些模板集并将其嵌入<script>
元素中:
<script id="tmpl1" type="text/template">
Some template code...
</script>
<script id="tmpl2" type="text/template">
Some template code...
</script>
...
并将模板从<script>
s中拉出来:
render: function() {
var tmpl = _.template($('#tmpl1').html());
this.$el.html(tmpl(this.model.toJSON()));
return this;
}
你可能想要在某个地方缓存已编译的模板tmpl
,甚至在定义视图类时编译它(假设DOM已经足够准备好了):
var V = Backbone.View.extend({
template: _.template($('#tmpl1').html()),
//...
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});