Backbone.js中的“选项”是什么?

时间:2012-01-25 04:12:21

标签: javascript backbone.js

Backbone.js中的“选项”是什么,我在官方source code看到了Thomas Davis并在{{3}}的教程博客中使用了示例代码:< / p>

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

我没有看到任何其他教程使用它,甚至提到它的文档。它确实如此,但是在上下文中的格式([options]),而不是硬编码的“选项”:options.view.addFriendLi

2 个答案:

答案 0 :(得分:17)

传统上,

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

所以你可以知道,“选项”==“{view:this}”

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

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