【发布时间】:2013-05-29 01:30:15
【问题描述】:
我用自己的html调用列表元素的视图,在这个视图中有一个对单个项目的另一个视图的迭代调用。问题是listelement的第一个视图看不到自己的html。如果我将 el 设置为获取 id (el:$("#pagination-centered") ) ,我想在其中追加迭代单个元素,不要渲染。
列表元素视图:
define(["jquery", "underscore", "Backbone", "Handlebars",
"views/singlepostview", "text!templates/home.html"],**<--html**
function ($, _, Backbone, Handlebars,SinglePost, template) {
var Home = Backbone.View.extend({
el:$("#pagination-centered"),//it is inside home.html defined above
template: Handlebars.compile(template),
initialize: function () {
// this.model.bind("reset", this.render, this);
},
events: {
},
render: function (eventName) {
$(this.el).empty();
_.each(this.model.models, function (ad) {
$(this.el).append(new SinglePost({
model: ad
}).render().el);
}, this);
return this;
}
});
return Home;
});
单元素视图:
define(["jquery", "underscore", "Backbone", "Handlebars", "text!templates/singlepost.html"],
function ($, _, Backbone, Handlebars, template) {
var SinglePost = Backbone.View.extend({
//el:$("#pagination-centered"),
//tagName: "li",
events: {
"click": "goToDetails"
},
template: Handlebars.compile(template),
initialize: function () {
this.model.bind("change", this.render, this);
this.model.bind("destroy", this.close, this);
},
render: function (eventName) {
var ad = this.model.toJSON();
// console.log(ad);
ad.cid = this.model.cid;
$(this.el).html(this.template(ad));
return this;
},
goToDetails: function () {
Backbone.history.navigate("#user/"+this.model.id, {trigger: true});
}
});
return SinglePost;
与视图主页关联的模板(元素列表):
<div class="row">
<div class="page-header ">
<p class="pull-right"><a href="#">see all</a></p>
<h4>Honors <small>(10)</small></h4>
</div>
<div class="pagination-centered">
</div>
</div>
与查看 SinglePost(列表项)关联的模板:
<a href="#"><img src="{{immagine.url}}" class="img-circle"></a>
我想在 Home 视图的模板内,特别是在 div class="pagination-centered" 内渲染这个(最后一个)singlepost 视图的 singlepost 模板。 将按以下方式完成:
**<div class="row">
<div class="page-header ">
<p class="pull-right"><a href="#">see all</a></p>
<h4>Honors <small>(10)</small></h4>
</div>
<div class="pagination-centered">
*<a href="#"><img src="{{immagine.url}}" class="img-circle"></a>*
</div>
</div>**
【问题讨论】:
-
这里的逻辑问题,你的元素不应该在视图的模板中。你为什么不用你的视图来创建它呢?使用
tagName和attributes属性。 -
因为我需要在复杂的 html 中插入单个元素的迭代视图的结果,如下所示:
荣誉(10)
-
如何创建带有标记名和属性的复杂 html?
-
嗯,使用
tagName、id和attributes作为你元素的参数,当你实例化你的视图时,你的元素就会被创建。您只需将其附加到 DOM。顺便说一句,如果您需要输入的 html 不仅仅是#pagination-centered元素,则不应将其附加到视图中。 -
所以我可以简单地使用 tagName 创建一个像上面这样的复杂 html?
标签: javascript jquery backbone.js