Backbone.js 中的“options”是什么?

17

在Backbone.js中,"options"是什么?我在官方源代码和由Thomas Davis写的教程博客中看到了这个词,并且还有示例代码:

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

我没有看到其他任何使用这个的教程,即使是文档也只是在某种上下文格式中提到了它([options]),而不是硬编码的"options": options.view.addFriendLi

2个回答

19

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 :(
如何使用调用的函数中的this对象,取决于该函数。
backbone的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的上下文中提出这个问题。我问的不是[options],而是来自Backbone.js内部的硬编码“options”。不过,在不同的情况下,你的回答很棒 :) - Jan Carlo Viray
编辑后,更多关于backbone如何在此方法中处理选项的内容。 - Alex Wayne
嗯,那确实有道理。感谢您的时间 :) - Jan Carlo Viray
我认为这个答案必须在2015年更改 :( this.options不再在构造函数中自动赋值。 - Alexander Mills

1

嗯,你可以看看Thomas Davis的教程博客,里面有示例代码,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:this}”

它创建了一个新的朋友,并传入一个参数({view:this}),然后将自身传递给上述函数。

结合代码options.view.addFriendLi,我们可以知道为什么它可以调用方法.addFriendLi


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接