2012-01-25 37 views
14

là gì "tùy chọn" trong Backbone.js mà tôi nhìn thấy trên tất cả các quan chức source code và cũng được sử dụng trong một blog hướng dẫn bởi Thomas Davis với mẫu mã ở đây:"Tùy chọn" trong Backbone.js là gì?

Friends = Backbone.Collection.extend({ 
    initialize: function (models, options) { 
        this.bind("add", options.view.addFriendLi); 
       } 
}); 

Tôi không thấy bất kỳ hướng dẫn khác sử dụng nó, và thậm chí cả doc đề cập đến nó. Nó có, nhưng trong một loại ngữ cảnh định dạng ([tùy chọn]), không phải trong một "tùy chọn" được mã hóa cứng: options.view.addFriendLi

Trả lời

16

options, thông thường, là đối tượng javascript của cặp khóa/giá trị cung cấp dữ liệu/ngữ cảnh/đối số/cấu hình cho một cuộc gọi phương thức. Hãy nghĩ về nó giống như các đối số được đặt tên, trái ngược với các đối số được đặt hàng.

Ví dụ:

var makePerson = function(name, options) { 
    var person = {}; 
    person.name = name; 
    person.age = options.age; 
    return person; 
}; 

var me = makePerson('Alex', {age:30}); // In 3 days... scary :(

Làm thế nào các chức năng được gọi là sử dụng đối tượng này, tùy thuộc vào chức năng đó.

Tài liệu về xương sống cho Collection.initialize() dường như không liệt kê những phím nào trên đối tượng tùy chọn được sử dụng hoặc được mong đợi, điều này thật không may. Vì vậy mà không cần nhìn vào nguồn, không có cách nào để nói. Nhưng ví dụ của bạn dường như chỉ ra một khóa view được mong đợi. Vì vậy, bạn có thể gọi nó như thế này:

var friendsCollection = new Friends(userModels, {view: someBackboneView}); 

Đây chỉ đơn giản là một quy ước nhiều thư viện có xu hướng sử dụng và không có gì đặc biệt về nó. Nhưng thường có nhiều phím trong một đối tượng được truyền đến một cuộc gọi hàm tốt hơn một hàm funciton mà bạn gọi với nhiều đối số, bởi vì mỗi giá trị có một nhãn làm cho nó rõ ràng giá trị của mỗi giá trị.


Nhìn một chút nữa, bây giờ ở đây: http://documentcloud.github.com/backbone/docs/backbone.html#section-53

Dường như Collection.initialize() chỉ chấp nhận một chìa khóa duy nhất trong tùy chọn của nó: comparator. Ở đây bạn có thể định nghĩa một hàm sử dụng để sắp xếp các mô hình trong bộ sưu tập: http://documentcloud.github.com/backbone/#Collection-comparator

làm việc đó vào ví dụ của bạn, bạn sẽ gọi đó là như thế này:

var friendsCollection = new Friends(userModels, { 
    view: someBackboneView, 
    comparator: function(friend) { 
    return friend.get('age'); 
    } 
}); 
+1

Tôi thích câu trả lời của bạn. Tôi chắc chắn đã học được điều gì đó từ nó như vậy +1, nhưng tôi yêu cầu nó trong bối cảnh Backbone.js.Nó không phải là [tùy chọn] mà tôi yêu cầu nhưng là một "tùy chọn" được mã hóa cứng từ việc sử dụng Backbone.js. Tuy nhiên, câu trả lời tuyệt vời trong một bối cảnh khác nhau :) –

+0

Chỉnh sửa với nhiều hơn về cách xương sống cụ thể xử lý các tùy chọn trong phương pháp này. –

+0

Điều đó có ý nghĩa. Cảm ơn thời gian :) –

1

Vâng, bạn sẽ nhìn thấy blog của hướng dẫn bởi Thomas Davis với mẫu mã, các Backbone.View.extend sẽ trả lời câu hỏi của bạn:

.... 
AppView=Backbone.View.extend({ 
    el:$("body"), 
    initialize:function(){ 
     this.friends=new Friends(null, {view:this}); 
     //Create a friends collection when the view is initialized, 
     //Pass it a reference to this view to create a connection between the two 
    } 
.... 

Điều quan trọng là this.friends=new Friends(null, {view:this});

Từ đoạn code trên initialize:function(models, options)

Vì vậy, bạn có thể biết, "Tùy chọn" == "{xem: đây}"

Nó tạo ra một người bạn mới và vượt qua trong một tham số ({xem: đây}) , sau đó nó tự chuyển đến hàm trên.

Kết hợp mã options.view.addFriendLi, chúng tôi có thể biết tại sao nó có thể gọi phương thức .addFriendLi.

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