【发布时间】:2014-06-12 14:45:50
【问题描述】:
我正在尝试学习Backbone.js,为此我现在想将一组模型加载到视图中。通过在窗口中打开一个选项卡,我首先添加以下模板:
<script type="text/template" id="tab-content-template">
<div class="conversation-window" id="conversation<%= ticketId %>"></div>
</script>
在这个模板中,我现在要加载属于 ticketId 的消息集合。所以我做了一个这样的集合:
var MessageCollection = Backbone.Collection.extend({
url: 'ticket/:id/messages'
});
还有一个观点:
var MessageView = Backbone.View.extend({
initialize: function(models, options) {
this.ticketId = options.ticketId;
},
el: function() {
return '#conversation' + this.ticketId;
},
className: 'user-message'
});
所以我希望在#conversation1 中插入消息列表(对于ticketId 1)。然后我尝试运行这个:
var messageView = new MessageView(messageCollection, {ticketId: 1});
messageView.render();
console.log(messageView);
不幸的是,没有任何反应,当我查看控制台时,我看到 ticketId: 1 但 el: undefined。我有点迷失在我做错的事情中(总体上有点迷失在 Backbone)。
有人知道我在这里做错了什么以及如何解决吗?欢迎所有提示!
【问题讨论】:
-
我不确定你是否在你的集合上运行
fetch()来填充其中的模型,尽管我确实看到你将messageCollection传递给MessageView(尽管我通常将其设置为collection而不是models)。此外,我在您的视图中看不到指向您的模板的直接链接。不知道你是想看带数据的模型,还是页面的渲染? -
如果您在视图中定义
el,您是在告诉 Backbone 管理现有元素 - 在本例中,是 ID 为“conversation1”的元素。该元素位于您在消息顶部发布的模板中。在您实例化您的 messageView 之前,您确定将其渲染到您的页面吗?
标签: javascript backbone.js collections