2011-12-11 35 views
30

Kịch bản:
Tôi có một alert() nói undefined khi tôi (cố gắng) đặt biến myVar qua Constructor. Tuy nhiên, nếu tôi bỏ ghi chú số myVar đang nằm trong myView, cảnh báo sau đó thay vào đó là "Hello from inside", giống như người ta mong đợi.Backbone.js - qua các đối số thông qua constructor

Câu hỏi:
Điều này có nghĩa rằng tôi không thể đặt bất kỳ params trong constructor của quan điểm ngoại trừ xương sống params riêng, chẳng hạn như model, collection, el, id, className & tagName?
Manual: http://documentcloud.github.com/backbone/#View-constructor

Mã:

var myView = Backbone.View.extend({ 

    //myVar : 'Hello from inside', 

    initialize: function() { 
     alert(this.myVar); 
    } 
)}; 

new myView({myVar: 'Hello from outside'}); 

Trả lời

56

Tùy chọn chuyển vào constructor sẽ được tự động lưu trữ như this.options

var myView = Backbone.View.extend({ 

    myVar : 'Hello from inside', 

    initialize: function() { 
     alert(this.options.myVar); 
    } 
)}; 

new myView({myVar: 'Hello from outside'}); 
+0

Fantastic. Đã hoàn toàn bỏ lỡ điều đó trong sách hướng dẫn! – Industrial

+11

Cần lưu ý rằng trong tình huống này, chế độ xem mới được tạo của bạn sẽ có 'this.myVar' và' this.options.myVar' này. Nếu bạn đang cố ghi đè 'this.myVar' với các tùy chọn được chuyển, bạn có thể muốn' this.myVar = this.options.myVar' này trong hàm khởi tạo của bạn. – czarchaic

+3

Tuyệt vời! Tìm nhanh từ Google. –

24

Tính đến xương sống 1.1.0, lập luận options tự động là no longer attached cho chế độ xem (xem issue 2458 để thảo luận). Bây giờ bạn cần phải đính kèm các tùy chọn của mỗi điểm bằng tay:

MyView = Backbone.View.extend({ 
    initialize: function(options) { 
     _.extend(this, _.pick(options, "myVar", ...)); 
     // options.myVar is now at this.myVar 
    } 
}); 

new MyView({ 
    myVar: "Hello from outside" 
    ... 
}); 

Hoặc bạn có thể sử dụng this mini plugin tự động đính kèm tùy chọn danh sách trắng, như vậy:

MyView = BaseView.extend({ 
    options : ["myVar", ...] // options.myVar will be copied to this.myVar on initialize 
}); 
Các vấn đề liên quan