2012-04-01 8 views
7

Tôi nhận được lỗi:Backbone - Object làm đã không có phương pháp 'áp dụng'

object render has no method apply for the below code.

gì có thể là lý do? Trang html không chứa bất kỳ mã nào ngoại trừ liên kết cho javascript.
Tôi nên làm gì để xóa lỗi?

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

Trả lời

4

Bạn không sử dụng đúng cú pháp để ràng buộc sự kiện thu add. Sử dụng:

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

Tham số thứ hai được mong đợi là gọi lại (hàm).

DEMO

+0

thanks a lot, làm việc tuyệt vời! – user1305989

+0

tại sao tôi nên trả về "this" trong hàm render? nó làm gì ? – user1305989

+0

Vì vậy, nó là chainable, do đó bạn có thể làm 'myView (someModel) .render(). El'. Trong giao diện chính, nó có thể không thú vị nhưng nó trở nên tiện dụng khi bạn có một cái nhìn - giả sử - một ContactItem. –