2012-01-25 58 views
14

什麼是「選項」在Backbone.js的,我看遍官方source code並在博客教程示例代碼本文中的使用Thomas DavisBackbone.js中的「選項」是什麼?

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

我沒有看到任何其他教程使用它,甚至提及它的文檔。它的確如此,但在格式上([選項]),而不是硬編碼的「選項」中:options.view.addFriendLi

回答

16

options通常是鍵/值對的JavaScript對象,它提供數據/上下文/參數/配置到方法調用。把它看作命名參數,而不是有序的參數。

例如:

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 :(

被調用的函數如何使用這個對象,是由那功能。

Collection.initialize()的骨幹文檔似乎沒有列出使用或期望選項對象上的哪些鍵,這是不幸的。所以不看源頭,無法說明。但是你的例子似乎表明view密鑰是預期的。所以,你可能會這樣稱呼它:

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

這是一個簡單的慣例許多圖書館傾向於使用,並沒有什麼特別的地方。但通常傳遞給函數調用的對象中的許多鍵比使用多個參數調用的函數要好,因爲每個值都有一個標籤,用於清楚說明每個值的用途。


看遠一點,現在在這裏:http://documentcloud.github.com/backbone/docs/backbone.html#section-53

它看起來像Collection.initialize()只接受在它的選項一個鍵:comparator。在這裏,您能夠定義用於集合中的模型進行排序的函數: http://documentcloud.github.com/backbone/#Collection-comparator

工作是爲你的榜樣,你會說這是這樣的:

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

我喜歡你的答案。我肯定從中學到了一些東西+1,但我在Backbone.js的背景下提出了這個問題。這不是我選擇的[選項],而是來自Backbone.js的硬編碼「選項」。但是,在不同的上下文中有很好的答案:) –

+0

編輯更多關於骨幹如何專門處理此方法中的選項。 –

+0

那麼這是有道理的。感謝您的時間:) –

1

那麼,你可以通過查看本教程博客示例代碼托馬斯·戴維斯Backbone.View.extend會回答你的問題:

.... 
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 
    } 
.... 

的關鍵是this.friends=new Friends(null, {view:this});

從上面的代碼initialize:function(models, options)

所以,你可以知道,「選項」 ==「{視圖:該}」

它創建了一個新朋友,並通過在一個參數({視圖:該}) ,然後它自己轉到上述功能。

結合代碼options.view.addFriendLi,我們可以知道它爲什麼可以調用方法.addFriendLi