Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Knockout.js autocomplete,如何绑定到正确的属性?_Javascript_Jquery_Knockout.js_Autocomplete - Fatal编程技术网

Javascript 使用Knockout.js autocomplete,如何绑定到正确的属性?

Javascript 使用Knockout.js autocomplete,如何绑定到正确的属性?,javascript,jquery,knockout.js,autocomplete,Javascript,Jquery,Knockout.js,Autocomplete,好的,我正在开发一个具有自动完成功能的程序,并且在绑定到我想要的属性时遇到了问题。数据对象是具有用户名和全名等属性的对象数组。因此,如果数据[0]。用户名为“John.Doe”,则数据[0]。全名为 “约翰·多伊”。调试时,我可以看到数据对象具有所有正确的值。这是映射对象: var EmployeeViewModel = function (data) { this.Email = ko.observable(); this.FullName = ko.observable();

好的,我正在开发一个具有自动完成功能的程序,并且在绑定到我想要的属性时遇到了问题。数据对象是具有用户名和全名等属性的对象数组。因此,如果数据[0]。用户名为“John.Doe”,则数据[0]。全名为 “约翰·多伊”。调试时,我可以看到数据对象具有所有正确的值。这是映射对象:

var EmployeeViewModel = function (data) {
    this.Email = ko.observable();
    this.FullName = ko.observable();
    this.$type = 'EmployeeViewModel ';
};

var AdSearchResultsViewModel = function (data) {
    this.Email = ko.observable();
    this.FullName = ko.observable();
    this.$type = 'EmployeeViewModel ';
};

var mapping = {
    'employees': {
        create: function (options) {
            return new EmployeeViewModel(options.data);
        }
    },
    'adSearchResults': {
        create: function (options) {
            return new AdSearchResultsViewModel(options.data);
        }
    }
};
这是EmployeeSearch ajax函数:

$("#EmployeeSearch").autocomplete({

        source: function (request, response) {
            $("#ajaxLoading").show(),

            $.ajax({
                url: "https://somesite.com/adsearch/search/directory",
                dataType: "jsonp",
                data: {
                    User: request.term,
                    Scope: "All"
                },

                success: function (data) {
                    viewModel.adSearchResults.removeAll();
                    ko.mapping.fromJS(data, mapping, viewModel.adSearchResults);
                    viewModel.adSearchResults.remove(function (item) { return item.Email() == ""; });
                    $("#ajaxLoading").hide();
                }
            });
        },
但是,当我开始在文本框中键入名称以搜索用户时,如果我搜索John.Doe,搜索将返回正确的结果。另外,如果我输入John,它将返回正确的结果。但是如果我输入JohnDoe,它将停止返回正确的结果。所以对我来说,搜索似乎绑定到UserName属性。如何将其绑定到FullName属性?这就是我现在拥有的,我不确定它是如何绑定到UserName属性的

<input id="EmployeeSearch" class="ui-icon-search" /><br />
        <div>
            <div class="DualListBox">
                <div style="float: left; width: 400px;">
                    <label>Search Results:</label>
                    <img id="ajaxLoading" src="~/Content/Images/ui-anim_basic_16x16.gif" style="display: none;" />
                    <select style="height: 335px; width: 400px;" multiple="multiple" data-bind="options: adSearchResults, selectedOptions: availableSelectedMembers, optionsText: function (item) { return item.FullName() + ', ' + item.Email() }"></select>
                </div>

搜索结果:
看起来您正在使用:对吗?是的,这是带有knockout js的jquery。您应该尝试在ajax success函数中抛出一个
console.log(data)
,以查看返回的内容。调用
ko.mapping.fromJS
是为视图模型设置值的过程,因此传递给它的任何数据以及映射的方式都由您处理。尝试进一步调试,您应该能够找到故障点。我已经看到了返回的内容。“数据对象是一个具有用户名和全名等属性的对象数组。因此,如果数据[0]。用户名为'John.Doe',则数据[0]。全名为'John Doe'。调试时,我可以看到数据对象具有所有正确的值。”您可以看到我正在将数据对象传递到ko.mapping.js中。我只是不知道如何让它在前端工作。前端认为它绑定到用户名。