在下划线模板中渲染对象
Render object in underscore template
tl;dr
我将一组项呈现到主干视图中,将它们传递到数组中的父视图,并尝试在下划线模板中显示它们。我得到的不是html,而是[object HtmlDivElement]
。
完整描述
我有一种视图生成器,这样:
- 我从后台接收数据
- 我逐行将其发送到视图生成器
- 我收到渲染视图
该过程的重点是接收来自不同来源的一般处理响应,其中需要对来自每个来源的数据进行不同的解析。我知道并已经根据请求为每个集合定义了解析方法。
相关代码:
var ResultGroupView = Backbone.View.extend({
tagName: 'tbody',
initialize: function (options) {
var self = this;
self.collection = new ResultGroupModel();
self.parent = options.parent;
self.collection.bind('add', self.renderItem, self);
_.bindAll(self, 'render', 'renderItem', 'addItem');
[...]
}
template: _.template(resultGroupTemplate),
addItem: function (item) {
var self = this;
var values = [];
//a new item is being added to the collection. get the details on how to parse it
_(self.parent.getColumns()).each(function (v) {
values.push(((!!v.parser) ? v.parser.call(self, item[v.Id]) : item[v.Id]));
});
//due to the binding above, this next line triggers the renderItem function
self.collection.add(new ResultItemModel({ Id: item.Id, Values: values }));
},
renderItem: function (item) {
var self = this;
//ResultItemView has tagName: 'tr'
var itemView = new ResultItemView({
model: item,
parent: self
});
self.$el.append(itemView.render().el);
},
[...]
});
每种类型的数据都定义了不同的parser
函数。具体来说,在我们有v.parser.call(self, item[v.Id])
的地方,这是对视图生成器的调用。解析器只是创建一个主干View
并返回渲染的对象。
上面提到的ResultItemView
只是在下划线模板上呈现其视图,该模板为:
<td><input type="checkbox" value="<%=Id%>" /></td>
<% _.each(Values, function(Val) { %>
<td>
<%=Val%>
</td>
<% }); %>
最后显示的内容是<%=Val%>
、[object HtmlImgElement]
、[object HtmlDivElement]
等等
显然,我对如何在视图和模板之间传递信息的理解存在一些基本错误。。。但我不知道需要改变什么。
我觉得使用类似node.outerHTML || new XMLSerializer().serializeToString(node);
的东西(如本文所述)相当粗糙。。。有更好的方法吗?
我怀疑你想得太多了。在你的renderItem
方法中,改变。。。
self.$el.append(itemView.render().el);
到
self.$el.append(itemView.render().$el.html());
相关文章:
- 筛选下划线中的对象
- 使用下划线将键和值的两个数组合并到一个对象中
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 将一个对象转换为一个单键对象数组(带下划线?)
- 使用下划线.js筛选 JS 对象
- 下划线,将对象列表转换为对象值数组
- 下划线.js,根据键值删除对象数组中的重复项
- 使用下划线链将 2 个对象的属性值合并到数组中
- 使用Javascript和下划线循环嵌套对象和数组
- 如何删除列表中的对象?Javascript nodejs和下划线
- 如何使用下划线根据自定义排序顺序对对象数组进行排序
- 下划线/洛达什号中的快捷方式,用于(递归)设置对象的所有属性
- 下划线分组依据单个方面与嵌套对象属性的比较
- 使用下划线排序依据对对象进行排序
- 从对象数组中删除重复项 - 下划线
- 下划线,清除对象的所有值,但保留键
- 使用下划线操作 JavaScript 对象
- 如何在 JavaScript 中使用 HTML5 文档的下划线小写对象值/数据
- 使用类似查询的对象过滤器数组下划线
- 结合2 MongoDB集合对象下划线或其他东西