2017-06-30 16 views
1
 data[config](); 

これが何をしているか説明してください。 (ブートストラップ崩壊)Twitter Bootstrap Collapse ..変な配列init?

Collapse._jQueryInterface = function _jQueryInterface(config) { 
    return this.each(function() { 
    var $this = $(this); 
    var data = $this.data(DATA_KEY); 
    var _config = $.extend({}, Default, $this.data(), (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config); 

    if (!data && _config.toggle && /show|hide/.test(config)) { 
     _config.toggle = false; 
    } 

    if (!data) { 
     data = new Collapse(this, _config); 
     $this.data(DATA_KEY, data); 
    } 

    if (typeof config === 'string') { 
     if (data[config] === undefined) { 
     throw new Error('No method named "' + config + '"'); 
     } 
     data[config](); 
    } 
    }); 
}; 

答えて

1
if (!data) { 
    data = new Collapse(this, _config); 
    $this.data(DATA_KEY, data); 
} 
data

だからは崩壊プラグインのインスタンスです。

config_jQueryInterfaceの機能です。

つまり、その関数に渡すと、toggle文字列 - data[config]data['toggle']になります。そしてtoggleはCollapseプラグインの一手法です。次に、()を追加すると、そのメソッドを実行できます。

切り替え方法:

Collapse.prototype.toggle = function toggle() { 
    if ($(this._element).hasClass(ClassName.SHOW)) { 
    this.hide(); 
    } else { 
    this.show(); 
    } 
}; 

config引数に応じて、data[config]()実行折りたたみプラグイン方式(それがshowhide、またはcollapseかもしれません)要約します。

+1

すばらしい返信をいただきありがとうございます。 –

+0

他の同様の問題がある場合は、ブートストラップのコードでこれらのものを 'console.log'することができます。たとえば、' console.log(data) 'や' console.log(data [config]) '折り畳み式の要素をクリックすると、コンソールにこれらのものが表示されます。 – makshh

+0

もう一つ、 'data [config]'の括弧は、データが配列であることを意味するわけではありません。この場合、データはオブジェクトであり、ドットや角括弧を使ってオブジェクトキーにアクセスすることができます。 toggle() 'または' data ['toggle']() 'を呼び出します。しかし、 'data.'toggle '()'を書くことはできません。そのため、かっこ表記を使用しています。 – makshh

関連する問題