javascript - Knockout Js 和 Typeahead

标签 javascript jquery knockout.js typeahead.js

enter image description here

您好 Knockout/typeahead 专家,我从上面的 typeahead js 得到了建议。我以数组格式提供数据

var itemsRandom= ['Apple', 'Ball','Ape'];

我的绑定(bind)代码是我在 stackoverflow 中找到的标准绑定(bind)。我将文本框绑定(bind)为

<input type="text" data-bind="typeahead:itemsRandom,value: selectedItem">  

数据甚至没有绑定(bind)到 knockout js。非常感谢您的建议。

ko.bindingHandlers.typeahead = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            var substringMatcher = function (strs) {
                return function findMatches(q, cb) {
                    var matches, substringRegex;

                    // an array that will be populated with substring matches
                    matches = [];

                    // regex used to determine if a string contains the substring `q`
                    substrRegex = new RegExp(q, 'i');

                    // iterate through the pool of strings and for any string that
                    // contains the substring `q`, add it to the `matches` array
                    $.each(strs, function (i, str) {
                        // console.log(str);
                        if (substrRegex.test(str)) {
                            // the typeahead jQuery plugin expects suggestions to a
                            // JavaScript object, refer to typeahead docs for more info

                            matches.push({
                                value: str
                            });
                        }
                    });

                    cb(matches);
                };
            };
            var $element = $(element);
            var allBindings = allBindingsAccessor();
            var source = ko.utils.unwrapObservable(valueAccessor());
            var items = ko.utils.unwrapObservable(allBindings.items) || 4;

            var valueChange = function (item) {
                allBindings.value(item);
                return item;
            };
            debugger;
            $element.attr("autocomplete", "off")
                    .typeahead({
                            hint: true,
                            highlight: true,
                            minLength: 0,
                            selectable: 'Typeahead-selectable'
                    }, {
                            valueKey: 'value',
                            source: substringMatcher(source),
                            items: items,
                            updater: valueChange
                    });
        }
    };

最佳答案

如果您使用的是最新版本的打字头,即 0.11,则代替

valueKey: 'value',

使用

displayKey: 'value',

关于javascript - Knockout Js 和 Typeahead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766679/

相关文章:

javascript - 如何只填充SVG的一部分?

javascript - 单击 $(document) 时如何使用 jquery 隐藏/关闭 div?

jquery - AngularJS (Blueimp Jquery-file-uploader) 与 Rails + Devise - 已完成 401 未经授权

javascript - 在Reactjs中创建带有对象前缀的自定义组件库

javascript - knockout 二维可观察阵列不更新

javascript - 使用 Knockout Validation 验证集合中的可观察量

javascript - 自定义绑定(bind)(?),向子节点添加一些标准的 Knockout 绑定(bind)

javascript - 如何在没有 ESLint no-unused-var 错误的情况下公开全局 javascript 函数?

javascript - 升级到 Webpack 5 后无法访问 copy-webpack-plugin 中的 list

javascript - 从客户端javascript发送数据到 Node js