javascript – Knockout.js绑定多个Select2

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

KnockOutCode

  1. $(window).load(function () {
  2.  
  3. ko.bindingHandlers.select2 = {
  4. init: function (element,valueAccessor,allBindingsAccessor) {
  5. var obj = valueAccessor(),allBindings = allBindingsAccessor(),lookupKey = allBindings.lookupKey;
  6. $(element).select2(obj);
  7. if (lookupKey) {
  8. var value = ko.utils.unwrapObservable(allBindings.value);
  9. $(element).select2('data',ko.utils.arrayFirst(obj.data.results,function (item) {
  10. return item[lookupKey] === value;
  11. }));
  12. }
  13.  
  14. ko.utils.domNodeDisposal.addDisposeCallback(element,function () {
  15. $(element).select2('destroy');
  16. });
  17. },update: function (element) {
  18. $(element).trigger('change');
  19. }
  20. };
  21.  
  22. ko.applyBindings(new viewmodel());
  23. function viewmodel() {
  24. var self = this;
  25.  
  26. self.MetricsModel = ko.observableArray([]);
  27.  
  28. GetMetrics();
  29.  
  30. function GetMetrics() {
  31. $.ajax({
  32. url: '/Admin/GetMetrics',type: "POST",dataType: "json",success: function (returndata) {
  33. self.MetricsModel(returndata);
  34. },error: function () {
  35. alert("eRROR GET Applications");
  36. }
  37. });
  38. };
  39.  
  40. }
  41. $("#application-select-metrics").select2();
  42. }

HTML文件

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

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

请帮忙,

谢谢,

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

解决方法

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

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

他的小提琴,更新

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

  1. ko.bindingHandlers.select2 = {
  2. init: function(element,allBindingsAccessor) {
  3. var obj = valueAccessor(),lookupKey = allBindings.lookupKey;
  4.  
  5. setTimeout(function() {
  6. $(element).select2(obj);
  7. },0);
  8.  
  9. if (lookupKey) {
  10. var value = ko.utils.unwrapObservable(allBindings.value);
  11. $(element).select2('data',function(item) {
  12. return item[lookupKey] === value;
  13. }));
  14. }
  15.  
  16. ko.utils.domNodeDisposal.addDisposeCallback(element,function() {
  17. $(element).select2('destroy');
  18. });
  19. },update: function(element) {
  20. $(element).trigger('change');
  21. }
  22. };

猜你在找的JavaScript相关文章