2012-01-25 28 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