如何使用下划线_.wrap方法修改jquery select2方法($ .fn.select2)

时间:2014-12-15 06:55:08

标签: jquery jquery-select2

我有一个以下HTML代码,用于select2组合框(pnlkr link

<label id="label-select2Home">My Home State: </label>
<div class="select2-home" xe-field="select2Home"></div>

JS初始化:

$( ".select2-home" ).select2({
        tokenSeparators: [",", " "],
        allowClear: true,
        placeholder: "Select a state",
        data: stateData
});

我需要做什么:

我必须在附近找到标签,并将文本更改为“TEST LABEL”。

我正在尝试使用

执行上述操作
$.fn.select2 = _.wrap($.fn.select2, function changeLabel(org) {
  // Replace the nearby label text with "TEST LABEL"
});

我无法做到

 // Replace the nearby label text with "TEST LABEL"
var args = Array.prototype.slice.call(arguments, 1);  // use Array.slice function to copy the arguments array from 1-end, without 'org'
        return org.apply( this, args ); 

它给我错误,如何调用.apply方法来操作select2并更改标签文本。

请参阅plnkr以获取上述示例

1 个答案:

答案 0 :(得分:2)

问题是_.wrap功能稍有破坏,因为它完全消除了$.fn.select2的旧值。这样做会消除$.fn.select2.defaults,这会搞砸插件。

为了解决这个问题,您可以执行以下操作:

$.fn.select2 = _.wrap($.fn.select2, function changeLabel(org) {
    // Replace the nearby label text with "TEST LABEL"

    $.fn.select2.defaults = org.defaults;
    var args = Array.prototype.slice.call(arguments, 1);
    return org.apply(this, args);
});