0

首先,请原谅我的幼稚问题。我知道有一个简单的答案,但我目前正在同时学习,JavaScript并且BackBone遇到了一些问题。

我只是想从我的 javascript 文件中的信息集合中将一个表添加到我的视图中。这是我的js文件:

(function(window,app,$){

    app.views.itemsIndex = Backbone.View.extend({
        id:"items-index",

        initialize:function(){

        },

        events:{

        },

        render:function(){
            template = new EJS({
                url:"js/templates/patron/items/itemsIndex.ejs"
            });

            this.$el.html(template.render());

            this.createDummies()

            return this;
        },

        createDummies:function(){

            var bookCollection = new app.collections.books();

            for (var i = 0; i < 10; i++) {
                var book = new app.models.book({title : 'title ' + i});
                bookCollection.add(book);

                var item = new app.views.itemsItem();
                this.$el.append(item.render().el);
            };

            console.log(bookCollection);
        }
    });

})(window,window.circulationApp || {},$)

当我尝试使用错误Uncaught ReferenceError: book is not defined渲染视图时出现错误

下面是我的 ejs 文件:

<td>
    <div class="td-wrap">
        <%= book.escape('title') %></td>
    </div><!-- .td-wrap -->

有什么想法吗?

4

1 回答 1

1

不了解整个事情,但据我了解,您想通过<td>元素呈现书籍集合

看起来 EJS 支持循环,那么为什么不直接将 Collection 插入到视图中,然后循环遍历书籍呢?

<% for (var i = 0; i < books.length; i++) {%>
    <%= books[i].escape('title'); %>
<% } %>

createDummies将返回 Collection :

createDummies: function() {
    var bookCollection = new app.collections.books();
    for (var i = 0; i < 10; i++) {
        var book = new app.models.book({title : 'title ' + i});
        bookCollection.add(book);
    };
    return bookCollection;
}

渲染它:

var tpl = new EJS({
    url:"js/templates/patron/items/itemsIndex.ejs"
});

var booksCollection = this.createDummies();

this.$el.html(tpl.render({books: booksCollection}));

理想情况下,在 Backbone 中,只有该render方法应该用于填充$elHTML。

于 2012-11-13T19:44:57.077 回答