我正在使用ASP.NET MVC,Web API和KnockOutJS来创建站点。使用Web API,我返回一个Location对象列表,它通过JQuery AJAX调用获取,并存储在observableArray中。KnockoutJS在使用自定义选项时遇到问题文字:在ko.mapping.fromJS数据
$.getJSON(baseLocationUri, function (data) {
$.each(data, function (key, val) {
self.locations.push(ko.mapping.fromJS(val));
});
});
返回可能是这样的(修整为简洁起见)中的数据的一个例子: [{ “LocationId”:1, “显示名称”: “星巴克”, “地址”:“123主要St. “}]
这工作正常,我在其他地方使用了相同的代码。
我也有一个绑定到observableArray的多选列表。如果我写的选择这种方式,用“显示名称”作为optionsText:,它工作正常:
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: 'DisplayName'"></select>
同样,如果我回到显示名称作为一个函数,它仍然有效:
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: function (item) { return item.DisplayName }"></select>
BUT - 如果我尝试添加另一个参数 - 失败。我在UI中看到的所有内容都是“未定义”。
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: function (item) { return item.DisplayName + ' | ' + item.Address }"></select>
还有一件事。如果我删除了AJAX调用和映射,并且只需在JavaScript中创建一个位置对象的observableArray,那么最后的代码工作得很好。
我错过了什么?
又一次,一双新鲜的眼睛看到了这个问题。谢谢!! –