2012-11-13 3 views
0

먼저 내 간단한 질문을 용서해주십시오. 나는 간단한 대답을 알고 있지만, 현재 JavaScriptBackBone을 동시에 배우고 있으며 몇 가지 문제가 있습니다.동적 정보가 포함 된보기 렌더링

나는 자바 스크립트 파일의 정보 모음에서 내보기에 테이블을 추가하려고합니다. 내가 오류 catch되지 않은 ReferenceError가와보기를 렌더링하려고 할 때 오류가 발생하는

(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 || {},$) 

: 여기 내 JS 파일입니다

<td> 
    <div class="td-wrap"> 
     <%= book.escape('title') %></td> 
    </div><!-- .td-wrap --> 
:이 책은 아래

을 정의되지 않은 내 EJS 파일입니다

의견이 있으십니까?

+2

'template.render()'를 호출 할 때 어떤 데이터도 템플릿에 전달하지 않으므로 * book *은 정의되지 않습니다. – Jack

+0

예. 나는 이해. 어떻게 데이터를 전달합니까? – coder

+0

나는 밑줄 템플릿을 사용 해왔다.하지만 esj에 대해서는'template.render (this.model.getJSON()))'과 같은 render 메소드로 전달한다고 생각한다. 그건 네가이 일에 대해 약간 잘못 생각한 것 같아.하지만 네가하고 싶은 일을 정확히 모르겠다. 너의 전망 '엘'은 뭐니? * itemsIndex는 부모보기로되어 있습니까? – Jack

답변

1

는 모든 일을 이해하지 마십시오,하지만 내 이해에서 당신은 <td> 요소를

은 EJS 루프를 지원 같은데, 왜보기에 직접 컬렉션을 삽입하지, 루프를 통해 책의 컬렉션을 렌더링 할 책? 단지 render 방법은 HTML과의 $el을 채우기 위해 사용되어야한다 백본에 이상적

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

var booksCollection = this.createDummies(); 

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

:

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

가 렌더링하려면 :

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

createDummies는 컬렉션을 반환합니다.

+0

이 코드를 내 코드에 적용 할 수있었습니다. Uncaught TypeError가 나타납니다 : '정의되지 않은'오류의 'escape'메서드를 호출 할 수 없습니다 ... 'escape'가 js 메서드라고 생각 했습니까? – coder

+0

'escape'는'Model' 클래스의 메소드이고'books'는 모델 콜렉션이므로 작동해야합니다. 아마도 Collection은 Array의 메소드를 모방하지 않지만 99 % 확신합니다. 'bookCollection'을 인쇄 해보십시오. – mexique1

관련 문제