cho2整合了select2远程(基于输入!)

时间:2013-05-22 03:08:09

标签: knockout.js durandal

我需要集成一个由远程服务填充的select2多个选择和淘汰赛。当然,只有选定的选项应该绑定,而不是来自远程的可用选项。

如果binded元素是select,那将是一个简单的任务(selectedOptions绑定),但是如果基于输入,则没有。

我创建了一个尝试操作knockout observable的更改事件,它或多或少地完成了它的工作,但它与绑定不同,例如当我在我的spa中的另一个页面上实例化该组件时,它被视为一个完全新的实例,我将不得不手动同步所选的选项,通常做淘汰的工作......

我的代码

var CodeItem = function(code) {
    this.code = ko.observable(code);
};

self.values =  ko.observableArray([]);
self.selectedIPCs = ko.observableArray([]);


$(".ipcMulti").select2({
                placeholder: "enter ipc",
                minimumInputLength: 2,
                multiple: true,
                id: function(obj) {
                    return obj;
                },
                ajax: { 
                    url: "/assets/Content/suggest_ipcr.json",
                    dataType: 'json',
                    data: function (term, page) {
                        return {
                            q: term // search term
                            //page_limit: 10,
                        };
                    },
                    quietMillis:100,
                    results: function (data, page) {
                        return {results: data.spellcheck.suggestions[1].suggestion};
                    }
                }
            });


            $(".ipcMulti").on("change",function(e){
                underlyingArray = self.selectedIPCs();
                if (e.added !== undefined) {
                    underlyingArray.push(new CodeItem(e.added));
                } else if (e.removed !== undefined) {
                    var todelete =  null;
                    ko.utils.arrayForEach(self.selectedIPCs(), function(item) {
                        var o1 =   e.removed;
                        var value = item.code();
                        if (o1==value) {
                            todelete = item;
                        }
                    });
                    ko.utils.arrayRemoveItem(underlyingArray, todelete);
                }
            });

0 个答案:

没有答案