2012-04-01 10 views
7

otrzymuję błąd:Backbone - Obiekt renderowanie ma żadnej metody „zastosuj”

object render has no method apply for the below code.

Co może być przyczyną? Strona HTML nie zawiera żadnego kodu poza linkiem do javascript.
co powinienem zrobić, aby usunąć błąd?

(function($) { 

    window.Book = Backbone.Model.extend({}); 

    window.Library = Backbone.Collection.extend({ 

     model: Book 

    }); // end of Collection 
    window.LibraryView = Backbone.View.extend({ 

     el: $('body'), 

     events: { 
      'click button#btn_add': 'btn_add' 

     }, 

     initialize: function() { 
      $(this.el).append("View initialized"); 
      _.bindAll(this, 'render', 'btn_add'); 
      this.collections = new Library(); 
      this.collections.bind('add', 'render', this); 
      this.startingDisplay(); 

     }, 
     startingDisplay: function() { 
      $(this.el).append("<input type='text' id='t1' /><button id='btn_add'>Add</button>"); 

     }, 

     btn_add: function() { 

      book = new Book({ 
       title: "first" 
      }); 
      alert("Name : " + book.get('title')); 
      this.collections.add(book); 
     }, 

     render: function() { 
      alert("render called"); 

     }, 

    }); // end of LibraryView 
    libraryview = new LibraryView(); 

})(jQuery);​ 

Odpowiedz

4

Nie używasz poprawnej składni do wiązania zdarzenia kolekcji add. Użyj:

// this.collections.bind('add', 'render', this); 
this.collections.bind('add', this.render, this); 

Oczekuje się, że drugim parametrem będzie wywołanie zwrotne (funkcja).

DEMO

+0

dziękuję, działa świetnie! – user1305989

+0

dlaczego powinienem zwrócić "to" w funkcji renderowania? co to robi ? – user1305989

+0

Więc jest przenośny, więc możesz zrobić 'myView (someModel) .render(). El'. W głównym widoku może to nie być interesujące, ale staje się przydatne, gdy masz widok - powiedzmy - ContactItem. –

Powiązane problemy