jQuery 自动完成和 knockout js 可观察数组

标签 jquery asp.net-mvc-3 autocomplete knockout.js

当我使用jquery自动完成功能并选择一些可能的值时,尝试更新knockoutjs生成的列表。但是当我在 Select 方法中调用 addItem 函数时,列表不会更新。预期的行为是将所选项目值添加到 Knockoutjs 项目数组中。

MVC3 示例 View :

<input type="text" id="Name"/>

<h4>Items</h4>
<ul data-bind="foreach: items">
    <li>
        <span data-bind="text: $index"></span>:
        <span data-bind="text: name"></span>
        <span data-bind="text: code"></span>
        <a href="#" data-bind="click: $parent.removeItem">Remove</a>
    </li>
</ul>

<script type="text/javascript">
    $(function () {
        var appViewModel = new AppViewModel();
        function AppViewModel() {
            var self = this;

            self.items = ko.observableArray([]);

            self.addItem = function (name, code) {
                self.items.push({ name: name, code: code });
            };

            self.removeItem = function () {
                self.items.remove(this);
            };
        }

        $('#Name').autocomplete({
            minLength: 1,
            delay: 500,
            source: function (request, response) {
                $.ajax({
                    type: "POST",
                    url: "/Home/SearchItems",
                    dataType: "json",
                    data: { searchText: request.term },
                    success: function (data) {
                        if (data != undefined) {
                            response($.map(data, function (item) {
                                return {
                                    label: item.Name,
                                    value: item.Name,
                                    code: item.Code
                                };
                            }));
                        }
                    }
                });
            },
            select: function (event, ui) {
                appViewModel.addItem(ui.item.value, ui.item.code);
            }
        });

        ko.applyBindings(new AppViewModel());
    });
</script>

最佳答案

这是一个工作版本:http://jsfiddle.net/jearles/vya7V/

您的问题是您在 ko.applyBindings 语句中实例化一个新的 AppViewModel,而不是传入您之前实例化并在 中使用的 appViewModel >选择

关于jQuery 自动完成和 knockout js 可观察数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483151/

相关文章:

javascript - 跨域获取ajax请求抛出解析错误

c# - 在 MVC 3 Razor 中获取事件页面链接的更好方法

c# - ASP.NET MVC3 调试 Application_Start

asp.net-mvc-3 - 如果 Razor 中的 else 语句不起作用

c# - 自动完成 try catch(不是标准异常)

jquery - 我怎样才能用 jquery 获得这种效果(在高度上)?

javascript - AJAX上传文件为什么要用FormData?

php - jquery自动完成标签问题

ios - XCode 6.3 自动完成功能不起作用

javascript - 为什么更改 <a> 元素的 href 在报价机上不起作用