2012-11-13 67 views
0

首先,请原谅我的天真问题。我知道有一个简单的答案,但我目前正在同时学习JavaScriptBackBone,并遇到一些问题。使用动态信息呈现视图

我只是试图从我的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 || {},$) 

我得到一个错误,当我试图渲染错误未捕获的ReferenceError的观点:书没有定义

下面

是我的EJS文件:

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

有什么想法?

+2

当你调用'template.render()'你没有传入任何数据到你的模板,所以* book *是未定义的。 – Jack

+0

是的。我明白那个。我如何传递这些数据? – coder

+0

我一直在使用下划线模板,但我认为对于esj,你将它传递给render方法,就像'template.render(this.model.getJSON()))'。这就是说,我认为你的这个问题有点不对,但我不确定你想要做什么,你的观点是什么“el”?是* itemsIndex *应该是父视图? – Jack

回答

1

不明白整个事情,但是从我的理解要通过<td>元素

看起来EJS支持循环,那么为什么不直接将收集到的观点,并遍历渲染书籍的集合书籍?

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

createDummies将返回集合:

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})); 

理想的骨干,应只使用render方法来填补你的$el与HTML。

+0

我能够适应这个我的代码 - 谢谢。我得到一个'Uncaught TypeError:不能调用未定义'错误的方法'转义'...我认为'转义'是一个js方法? – coder

+0

'escape'是'Model'类的一个方法,而'books'是一个模型集合,它应该可以工作..也许Collection不会模仿Array的方法,但我99%肯定它的确如此。尝试打印'bookCollection' – mexique1