Javascript 使用Knockout.js autocomplete,如何绑定到正确的属性?
好的,我正在开发一个具有自动完成功能的程序,并且在绑定到我想要的属性时遇到了问题。数据对象是具有用户名和全名等属性的对象数组。因此,如果数据[0]。用户名为“John.Doe”,则数据[0]。全名为 “约翰·多伊”。调试时,我可以看到数据对象具有所有正确的值。这是映射对象: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();
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中。我只是不知道如何让它在前端工作。前端认为它绑定到用户名。