javascript – Knockout.js绑定多个Select2

前端之家收集整理的这篇文章主要介绍了javascript – Knockout.js绑定多个Select2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是什么时候我将我的Select2与具有Knockout View模型的Multiple捆绑在一起.选择其中一个选项后,数据将第二次丢失

KnockOutCode

$(window).load(function () {

ko.bindingHandlers.select2 = {
    init: function (element,valueAccessor,allBindingsAccessor) {
        var obj = valueAccessor(),allBindings = allBindingsAccessor(),lookupKey = allBindings.lookupKey;
        $(element).select2(obj);
        if (lookupKey) {
            var value = ko.utils.unwrapObservable(allBindings.value);
            $(element).select2('data',ko.utils.arrayFirst(obj.data.results,function (item) {
                return item[lookupKey] === value;
            }));
        }

        ko.utils.domNodeDisposal.addDisposeCallback(element,function () {
            $(element).select2('destroy');
        });
    },update: function (element) {
        $(element).trigger('change');
    }
};

ko.applyBindings(new viewmodel());
function viewmodel() {
    var self = this;

    self.MetricsModel = ko.observableArray([]);

    GetMetrics();

    function GetMetrics() {
        $.ajax({
            url: '/Admin/GetMetrics',type: "POST",dataType: "json",success: function (returndata) {
                self.MetricsModel(returndata);
            },error: function () {
                alert("eRROR GET Applications");
            }
        });
    };

}
$("#application-select-metrics").select2();    
}

HTML文件

<select multiple="multiple" id="application-select-metrics" class="form-control" data-bind="options: MetricsModel,optionsText: 'Metrics_Name',OptionsValue:'Metrics_ID',optionsCaption: 'Choose...',select2: {}"></select>
@*<select multiple="multiple" id="application-select-metrics" class="form-control">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
</select>*@

请注意,注释部分,即硬编码值有效,它允许我选择多个值,并使用Knockout它第一次工作,我得到一个列表填充,但选择一次后,第二次数据是丢失.

请帮忙,

谢谢,

编辑:
正如Hanes所说,我编辑了代码,并引入了自定义绑定,但它仍然不起作用,我不认为自定义绑定的更新部分工作正常,因为下拉填充一次但无法绑定第二次.任何帮助都将很高兴.

解决方法

@rniemeyer不久前把它扔到了一个JSFiddle上,它可以帮助你:

http://jsfiddle.net/rniemeyer/R8UF5/

他的小提琴,更新

在更新值时,使用以下绑定与几个小提琴相结合:

ko.bindingHandlers.select2 = {
  init: function(element,allBindingsAccessor) {
    var obj = valueAccessor(),lookupKey = allBindings.lookupKey;

    setTimeout(function() { 
      $(element).select2(obj);
    },0);

    if (lookupKey) {
      var value = ko.utils.unwrapObservable(allBindings.value);
      $(element).select2('data',function(item) {
        return item[lookupKey] === value;
      }));
    }

    ko.utils.domNodeDisposal.addDisposeCallback(element,function() {
      $(element).select2('destroy');
    });
  },update: function(element) {
    $(element).trigger('change');
  }
};

猜你在找的JavaScript相关文章