2013-02-13 25 views
7

tôi có một cái nhìn với sự kiện này:"của router Lỗi Loại: Object [đối tượng Object] không có phương pháp 'tắt'" lỗi sử dụng các sự kiện khi chuyển đến xương sống 0.9.10

var View = Backbone.View.extend({ 
    el: $('#test'), 
    events: { 
    "change input": "test" 
    }, 
    test: function(e) { 
    console.log("test"); 
    } 
}); 

var view = new View(); 

Với xương sống 0.9.9 nó làm việc, nhưng với xương sống 0.9.10 Tôi đã nhận lỗi này: Uncaught TypeError: Object [object Object] không có phương thức 'off'. Những gì tôi cần phải thay đổi để làm việc với các sự kiện trên xương sống 0.9.10?

Tôi đang sử dụng

http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone-min.js

cám ơn của cdn này

+0

Lỗi này có được kích hoạt khi .test() được gọi không? Nó không có vẻ như thử nghiệm đang làm bất cứ điều gì liên quan đến .off(). Có một số mã khác đang gọi .off()? – DashK

+0

.test() chỉ được gọi khi sử dụng xương sống 0.9.9. Lỗi xuất hiện khi tải trang, trước khi tôi thực hiện bất kỳ tương tác nào với trang. – Camilo

+0

Nếu lỗi xuất hiện trước bất kỳ tương tác nào với trang, nguồn của vấn đề ở nơi khác. Bạn có thể cung cấp mã ném lỗi không? (Nếu bạn nhìn vào Firebug, bạn sẽ có thể nhận được một số dòng mà ném ngoại lệ.) – DashK

Trả lời

12

Tôi đã sử dụng jquery 1.5.2 và phương thức tắt được giới thiệu trên jquery 1.7.0. Backbone 0.9.9 yêu cầu el chứa phương thức unbind trong khi Backbone 0.9.10 yêu cầu el phải tắt phương thức. Phương pháp unbind tồn tại trên jquery 1.5.2 và đó là lý do tại sao mã của tôi làm việc với xương sống 0.9.9.

+0

Cảm ơn bạn rất nhiều :) –

+0

@Camilo: Cảm ơn bạn rất nhiều. Tôi giúp tôi rất nhiều. Tôi đã đấu tranh thông qua vấn đề này từ lâu. –

1

Hãy thử này ...

var Test = Backbone.View.extend({ 
    events: { 
    "change input": "test" 
    }, 

    initialize: function() { 
    this.setElement($('#test')); 
    }, 

    test: function(e) { 
    alert("test"); 
    } 
}); 

var test = new Test(); 

Hoặc, điều này sẽ tốt hơn ...

var Test = Backbone.View.extend({ 
    events: { 
    "change input": "test" 
    }, 

    test: function(e) { 
    alert("test"); 
    } 
}); 

var test = new Test({ 
    el: $('#test') 
}); 
+0

Không ai trong số họ làm việc. Tôi đã gỡ lỗi bằng ví dụ đầu tiên của bạn và tìm thấy sự cố trên setElement. Tham số đầu tiên của setElement là phần tử. Khi tôi gỡ rối, element.unbind tồn tại, nhưng element.off là không xác định. Tìm kiếm, tôi thấy rằng phương pháp unbind đã được thay đổi cho off trên xương sống 0.9.10. Tôi không hiểu tại sao phần tử không chứa phương pháp mới nhưng chứa cái cũ. – Camilo

+0

Ví dụ của bạn là chính xác. Vấn đề là tôi đang sử dụng một phiên bản jquery cũ trong dự án của tôi. Cảm ơn bạn đã giúp đỡ. – Camilo

Các vấn đề liên quan