Что такое "варианты" в Backbone.js?

Что такое " параметры" в Backbone.js, который я вижу во всем официальном исходном коде, а также используется в учебном блоге Thomas Davis с примером кода здесь:

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

Я не вижу никаких других обучающих программ, использующих его, и даже документа, упоминающего об этом. Это происходит, но в контексте вида формата ([options]), а не в "закодированных" вариантах: options.view.addFriendLi

Ответ 1

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');
  }
});

Ответ 2

Хорошо, вы можете увидеть учебный блог Томаса Дэвиса с образцом кода, 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.