0

我正在尝试从我的服务器(node.js)获取一个 mongodb 集合,并使用主干在模板上呈现此内容(下划线)。Mongodb 和 node.js 部分工作正常,因为我证明用集合做了一个 console.log,它给我带来了集合。我有下面的代码(我删掉了一些不相关的代码部分):

路由器.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的那个 repo https://github.com/ccoenraets/nodecellar

希望您的帮助,谢谢,问候

4

1 回答 1

0

此问题可能是因为您render在其他地方调用该方法。

该集合仅在 fetch 之后填充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
        }
    });

另外,为什么还要在模型中命名,而模型实际上是一个集合。

( { collection: bookList })比更有意义( { model: bookList } )

于 2013-07-30T16:33:11.503 回答