嵌套在另一个模板中的主干模板
backbone template nested in another template
是否可以将模板嵌套在模板中并通过主干视图进行访问?
例如,我有使用模板 1 的视图1,以及使用模板 2 的视图 2。 模板 2 实际上需要在模板 1 内部的 DIV 中。 我将模板 2 的 DIV 容器放在具有适当 id 的模板 1 中,但在呈现页面时它没有显示。 如果我从 Template2 内部删除 Template1div 容器并将其放在页面正文中,它可以正常工作。
所以只是想知道这是否可能,或者我是否必须嵌套视图/模型等才能完成这项工作?
模板2 中的数据在技术上与模板 1 无关,只需要显示在嵌入在模板 1 中的页面上的某个位置。
我过去处理这个问题的方法是分别定义两个视图,然后在渲染 View1 时,创建一个新的 View2,渲染它,然后将其插入到 View1 中。 所以:
window.View1 = Backbone.View.extend({
render: function() {
this.view2 = new View2();
this.$('insert-view-here').append(this.view2.render().el);
}
});
您应该为此创建子视图。
我喜欢在关闭中私有化子视图并返回公共视图。
var View = (function (BV) {
var View, Subview;
// Only this main view knows of this subview
Subview = BV.extend({
template: _.template( subtmpl ),
render: function () {
this.$el.html( this.template( this.model.toJSON() ) );
return this;
}
});
View = BV.extend({
template: _.template( tmpl ),
render: function () {
this.$el.html( this.template( this.model.toJSON() ) );
var subview = new SubView({ model: this.model });
// replace a div in your template meant for teh subview with the real subview
this.$el.find( "#subview" ).replaceWith( subview.render().el );
return this;
}
});
return View;
}(Backbone.View));
var view = new View({ model: user });
var subview = new Subview; // Reference Error
当您需要在模板 1 中多次包含 Template2(例如作为<ul>
中的<li>
元素(时,另一个有用的选项是将 Template2 函数传递到 Template1 中。 (来自Rico Sta Cruz的Backbone Patterns。
TasksList = Backbone.View.extend({
// Template1, inlined in js.
template: _.template([
"<ul class='task_list'>",
"<% items.each(function(item) { %>",
"<%= itemTemplate(item) %>",
"<% }); %>",
"</ul>"
].join('')),
// Template2, inlined in js.
itemTemplate: _.template(
"<li><%= name %></li>"
),
render: function() {
var html = this.template({
items: tasks /* a collection */,
itemTemplate: this.itemTemplate
});
$(this.el).append(html);
}
});
据我了解,典型的方法是将视图视为可以相互嵌入的完整对象。假设您有两个视图,视图 A 和视图 B。下面的代码演示如何将 ViewB 追加到 ViewA 中。
# this is coffeescript, but it's easily translated to JS
class ViewA extends Backbone.View
initialize: () ->
this.render()
render: ()->
this.$el.append(new ViewB().$el)
this.$el.append(new ViewB().$el)
return this
您可能会喜欢如何管理 ViewB(将其分配给属性或其他内容(,或者将不同的构造函数参数传递到每个 ViewB 实例中。
一个更精简的解决方案,不需要 jQuery append()
或涉及双 jQuery 作用域的附加 SubView 对象,是严格使用 underscore 方法预渲染/预编译,并使用主模板中的内部注释标签将子视图作为字符串插入。
View = Backbone.View.extend({
template: _.template(...),
prerender: function(tpl,model){// pre-render a component
var template = _.template(tpl);
return template(model);
},
render: function(){
var model = { ... };
var component = this.prerender(this.itemTemplate, model);
this.$el.html(this.template(model).replace('<!--#component-->', component));
}
});
如果您的模板不是常量,并且取决于当前范围的属性,则此功能尤其有用。
请注意,对于此问题的范围,您必须将 View2 模型传递给组件。
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 我怎么能把一个类嵌套在另一个类中呢
- 它在另一个函数中嵌套后不会输出文本
- 从另一个(初学者内部)访问嵌套的javascript函数
- 一个发布对另一个发布隐藏嵌套字段
- 嵌套另一个 Ajax 请求时,Ajax 响应处理中断
- 如何从jQuery中的另一个函数调用嵌套函数
- 如何检查一个对象是否嵌套在另一个对象的属性中作为属性
- 如何在 JavaScript 中从另一个外部函数访问嵌套的内部函数
- 如何在 Jquery 中访问嵌套在另一个对象中的对象的属性
- 嵌套在另一个模板中的主干模板
- 访问嵌套在 Javascript 中另一个对象中的对象的属性
- 向嵌套的 JavaScript 对象添加另一个值
- 引导表:如何将一个表嵌套到另一个表中
- 如何使用附加到html标签的嵌套ng应用程序将一个基于angularjs的SPA包含到另一个基于angularjs
- 使用Javascript查找元素组并将它们嵌套在一个新元素中
- 使用JQM(jQueryMobile),为什么可折叠嵌套另一个可折叠标题会间歇性切换
- 访问一个嵌套在一个带有聚合物的对象中的数组中的一个对象的值
- Javascript函数工厂嵌套在一个即时函数内嵌套jQuery准备好了
- 如何使
位置:相对嵌套在一个位置:绝对