2012-01-10 30 views
5

Tôi không thể hiểu tại sao this.model sẽ được định nghĩa trong view.intialize() khi tôi chạy this.model.fetch() trên nó nhưng không phải trong view.render().Mô hình xương sống là không xác định?

Chrome Developer Tools Screenshot

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/example.html' 
], function($, _, Backbone, exampleTemplate){ 

    var exampleView = Backbone.View.extend({ 
    el: $('body'), 
    initialize: function() { 
     this.model.set({ _id: this.options.user_id }); 
     this.model.fetch({ 
     success: this.render, 
     error: function(model, response) { 
      console.log('ERROR FETCHING MODEL'); 
      console.log(model); 
      console.log(response); 
     } 
     }); 
    }, 
    render: function() { 
     console.log('HELLO FROM RENDER'); 
     console.log(this.model); 
     console.log('GOODBYE FROM RENDER'); 
    } 
    }); 

    return exampleView; 

}); 
+1

'This' có được tham chiếu khi thành công được gọi không? Có lẽ bạn cần phải ràng buộc nó. – JaredMcAteer

Trả lời

8

Đó là bởi vì các this đang được ràng buộc khác nhau vì làm đang được sử dụng như một callback, đặt dòng sau như dòng đầu tiên trong phương pháp initialize của bạn để ràng buộc this cách nhìn hiện tại cho phương pháp render:

_.bindAll(this,"render"); 

Underscore.js bindAll function

Ràng buộc một số phương thức trên đối tượng, được chỉ định bởi methodNames, thành được chạy trong ngữ cảnh của đối tượng đó bất cứ khi nào chúng được gọi. Rất có ích cho các chức năng ràng buộc sẽ được sử dụng như các trình xử lý sự kiện , mà nếu không sẽ được gọi với một điều khá vô ích này.

+0

D'oh, cảm ơn bạn! – djmccormick

+0

@djmccormick bạn được chào đón! –

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