Javascript 使用requireJs&;渲染前组合多个模板;BackboneJs
我正在尝试使用requireJs和requiteJs文本插件在BackboneJs中实现每个视图多个模板的想法 这是我的视图代码-您可以看到我在witch的define()中成功地传递了两个模板Javascript 使用requireJs&;渲染前组合多个模板;BackboneJs,javascript,jquery,backbone.js,requirejs,Javascript,Jquery,Backbone.js,Requirejs,我正在尝试使用requireJs和requiteJs文本插件在BackboneJs中实现每个视图多个模板的想法 这是我的视图代码-您可以看到我在witch的define()中成功地传递了两个模板 define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], function(Backbone, Template, ElementList){ var BlogPost
define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], function(Backbone, Template, ElementList){
var BlogPostIndexView = Backbone.View.extend({
initialize: function () {
var $template = $(Template);
$template.prepend(ElementList);
this.template = _.template($template.html());
},
render: function (Template) {
this.$el.html(this.template({posts : this.collection}));
return this;
},
add: function() {
}
});
return BlogPostIndexView; });
您可以看到,我正在尝试将第二个模板合并到第一个模板的html中。这是可行的,但不幸的是,当我渲染时,我得到了这个
<div class="outer-wrapper">
<div id="blog-post-wrapper">
<h1>texting views</h1>
</div>
<ul>
<% _.each(posts, function(post){ %>
<li><%= post.title %></li>
<% }); %>
</ul>
短信视图
我缺少外层包装的结束标记,但假设它应该在结束“ul”标记之后,您的模板如下所示: container.html
<div class="outer-wrapper">
<div id="blog-post-wrapper">
<h1>texting views</h1>
</div>
</div>
顺便说一句:看看这个!text alternative除了列表未计算之外,它的位置是确定的还是应该在“h1”之后?这与我在initialise中使用的逻辑相同。您能在initialise函数中打印$template.html()的输出吗?我想逻辑不一样。。在您的例子中,您将在$template.prepend(ElementList)之后获得包含在'ul'标记内的内容,并用双引号括起来;呼叫这就是为什么它没有被评估。在我的例子中,您是在添加评估列表..我刚刚使用了insead的小胡子
<ul>
<% _.each(posts, function(post){ %>
<li><%= post.title %></li>
<% }); %>
</ul>
define([..."container.html", "list.html"...], function (...container, list...) {
...
initialize: function () {
// container:
// no need to compile 'container' if there are no variables..
// list:
this.listTemplate = _.template(list);
}
...
render: function () {
var $container = $(container);
$container.append(this.listTemplate({...}));
this.$el.html($container);
}