簡體   English   中英

Backbone.js中的“選項”是什么?

[英]What is “options” in Backbone.js?

什么是Backbone.js中的“ 選項 ”,我在官方源代碼中看到了這些選項 ,並在Thomas Davis的教程博客中使用了示例代碼:

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

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

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

好吧,您可以通過示例代碼看到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)

所以你可以知道,“選項”==“{view:this}”

它創建一個新的朋友並傳入一個參數({view:this}),然后它將自己傳遞給上面的函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM