2013-07-13 22 views
4

我正在使用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,那么最后的代码工作得很好。

我错过了什么?

回答

5

你试过:

function (item) { return item.DisplayName() + ' | ' + item.Address() } 

因为ko.mapping.fromJS(val)将显示名称和地址到观测。

+1

又一次,一双新鲜的眼睛看到了这个问题。谢谢!! –

相关问题