我的問題是,當我將我的Select2與Multiple與Knockout View Model綁定在一起時。選擇其中一個選項後,數據丟失第二次Knockout.js與多個Select2結合
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它第一次工作,我得到一個列表填充,但選擇一次後,第二次數據丟失。
請幫幫忙,
感謝,
編輯: 正如哈內斯提到的,我編輯的代碼,並推出自定義綁定,但它仍然無法正常工作,我不認爲更新部分的自定義綁定工作正常,因爲下拉列表只填充一次,但無法第二次綁定。任何幫助將很樂意欣賞。
嗨,隊友,我的代碼是正確的。我從ajax調用中獲得一個對象數組。這將重新填充我的MetricsModel。我可以在首次選擇任何值時進行多項選擇工作,但是當我選擇其他值時,我會在第二次選擇時收到「找不到匹配項」。使用選項對選擇進行硬編碼,就像魅力一樣。 –
代碼確實是正確的。小提琴是錯誤的,因爲模擬數據以錯誤的格式返回。更新的小提琴:http://jsfiddle.net/2Q37X/1/ –
道歉,我對返回的數據的假設是錯誤的!我刪除了我之前的評論。 – Jeroen