我正在尝试从我的服务器(node.js)获取mongodb集合,并使用主干在模板上呈现此内容(下划线)。 Mongodb和node.js部分工作正常,因为我证明了与集合做一个console.log它带给我的集合。我有下面的代码(我切断了一些不相关的代码部分):
的 router.js 的
appRouter.on('route:books', function () {
var bookList = new BookCollection();
bookList.fetch({
success: function () {
$('#content').html(new BookListView( { model: bookList } ).el);
}
});
});
的 bookListView.js 的
, render: function () {
var books = this.model.models;
$(this.el).html(this.template());
_.each(this.model.models, function(book) {
$('.thumbnails', this.el).append(new BookListItemView( { model: book } ).render().el);
}, this);
}
的 bookListItemView.js 的
, render: function () {
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
我的问题是 this.model.models = undefined ,我不明白为什么导致在相同代码完美运行前5分钟。如果我做console.log(this.model),它会给我带来模型列表。
我的代码的灵感来自Christophe Coenraets的回复https://github.com/ccoenraets/nodecellar
希望你的帮助,请你,问候
答案 0 :(得分:0)
此问题可能是因为您在其他地方调用了render
方法。
仅在获取Async
后填充集合。因此,当调用render
方法时,model
属性未定义。所以你会看到一个错误。
要解决此问题,您必须在填充集合并初始化视图后调用render
。(在成功回调中)
bookList.fetch({
success: function () {
var bookListView = new BookListView( { model: bookList } );
$('#content').html(bookListView.el);
bookListView.render(); // Need to call render here
}
});
另外,为什么你在模型中也需要名称,其中inturn实际上是一个集合。
( { collection: bookList })
比( { model: bookList } )