2012-04-01 4 views
7

я получаю сообщение об ошибке:Backbone - объект визуализации не имеет метод «применить»

object render has no method apply for the below code.

Что может быть причиной? Страница html не содержит никакого кода, кроме ссылки на javascript.
Что нужно сделать, чтобы удалить ошибку?

(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);​ 

ответ

4

Вы не используете правильный синтаксис, чтобы связать событие add коллекции. Использование:

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

Ожидается, что вторым параметром будет обратный вызов (функция).

DEMO

+0

спасибо, работает отлично! – user1305989

+0

Почему я должен возвращать «это» в функции рендеринга? Что это делает ? – user1305989

+0

Таким образом, он можно подключить, таким образом вы можете сделать myView (someModel) .render(). El'. В главном представлении это может быть не так интересно, но это становится удобным, если у вас есть представление - скажем, - ContactItem. –