ligerUI 关于ligerComboBox控件无法自动完成本地数据问题

对web的关注开始于 最近跨平台的火热! 我需要做一个小的人事系统
本人一个小码农 不懂一些跨平台的语言,所以决定用web来试一试! 然就是下面的一个小插曲!
我就不谈我是这么样选择ligerUI的 在使用的过程中也发现了大大小小问题 但是他是开源的所以我们可以自己来解决。下面就是我发现ligerCombobox的一个小的问题 本地数据无法自动完成 “Autocomplate ”
本人是菜鸟没学过js 一些处理上也许让看到这篇文章的人 忍不住要骂我。骂我没问题 但不要骂我的家人……

好的 我们来看一段代码`在此输入代码

<!-- lang: js -->
 _setAutocomplete: function (value) {
        var g = this, p = this.options;
        if (!value) return;
        g.inputText.removeAttr("readonly");
        var lastText = g.inputText.val();
        g.inputText.keyup(function ()
        {
            setTimeout(function ()
            {
                if (lastText == g.inputText.val()) return;
                p.initValue = "";
                g.valueField.val("");
                if (p.url)  //在这里他判断了combobox本身是否设置了url
                {
                    g.setParm('key', g.inputText.val());  //如果设置了url就传到一个key做为参数然后传到后台
                    g.set('url', p.url);
                    g.selectBox.show();
                } else if (p.grid)  //这里如果combobox本身的url没有设置那么 检查一下是否设置了grid
                {
                    g.grid.setParm('key', g.inputText.val()); //这里就一样了 设置key然后传向后台
                    g.grid.reload();
                } 
                lastText = g.inputText.val();
            }, 1);
        });
    }

我们发现根本就没有本地数据的判断或者使用 可见作者应该没有考虑本地数据
那么我们下一步就是增加一些代码来加入本地数据的判断 和处理

<!-- lang: js -->
_setAutocomplete: function (value) {
        var g = this, p = this.options;
        if (!value) return;
        g.inputText.removeAttr("readonly");
        var lastText = g.inputText.val();
        g.inputText.keyup(function ()
        {
            setTimeout(function ()
            {
                if (lastText == g.inputText.val()) return;
                p.initValue = "";
                g.valueField.val("");
                if (p.url)  //在这里他判断了combobox本身是否设置了url
                {
                    g.setParm('key', g.inputText.val());  //如果设置了url就传到一个key做为参数然后传到后台
                    g.set('url', p.url);
                    g.selectBox.show();
                } else if (p.grid)  //这里如果combobox本身的url没有设置那么 检查一下是否设置了grid
                {
                    if(p.grid.data) //判断是否设置了本地数据
                    {
                        var rows = p.grid.data.Rows; //获取本地数据所有行  
                        var newrow = {"Rows":[]}; //创建一个新的本地数据副本
                        for(var o in rows){  //下面就是本地数据匹配
                            var no = rows[o].No;  //这么我配备的是 我的本地数据的一个No 字段 我的行数组大概是这样的{Id:0,No:'001',Name:'小明'}
                            var index =no.indexOf(lastText); 
                            if(index >= 0 ){
                                newrow.Rows.push(rows[o]); //如果本行包含了用户输入的数据那么加入副本数据
                            }
                        }
                        g.grid.setOptions({data:newrow}); //匹配完毕设置新的本地数据
                        g.grid.loadData();//载入新数据
                        return;
                    }
                    g.grid.setParm('key', g.inputText.val()); //这里就一样了 设置key然后传向后台
                    g.grid.reload();
                } 
                lastText = g.inputText.val();
            }, 1);
        });
    }

最终结果是

ligerUI 关于ligerComboBox控件无法自动完成本地数据问题_第1张图片

你可能感兴趣的:(ligerUI 关于ligerComboBox控件无法自动完成本地数据问题)