【发布时间】:2014-02-03 13:07:14
【问题描述】:
我的问题是,我何时将 Select2 与 Multiple 与 Knockout View Model 绑定。选择其中一个选项后,数据第二次丢失
敲除代码
$(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 所提到的,我已经编辑了代码,并引入了自定义绑定,但它仍然不起作用,我认为自定义绑定的更新部分工作不正常,因为下拉填充一次但无法绑定第二次。任何帮助将不胜感激。
【问题讨论】:
-
嗨,伙计,我的代码是正确的。我从 ajax 调用中得到一个对象数组。这将反过来填充我的 MetricsModel。我第一次选择任何值时可以进行多项选择,但是当我选择其他值时,我第二次选择时得到“未找到匹配项”。使用选项硬编码选择,它就像一个魅力。
-
代码确实是正确的。小提琴是错误的,因为模拟数据以错误的格式返回。更新小提琴:jsfiddle.net/2Q37X/1
-
抱歉,我对返回数据的假设是错误的!我已经删除了我之前的评论。
标签: javascript jquery knockout.js jquery-select2