knockout.js - KnockoutJS 在使用自定义选项时遇到问题Text : on ko. mapping.fromJS 数据

标签 knockout.js

我正在使用 ASP.NET MVC、Web API 和 KnockOutJS 创建站点。使用 Web API,我返回一个 Location 对象列表,该列表通过 JQuery AJAX 调用获取,并存储在 observableArray 中。

        $.getJSON(baseLocationUri, function (data) {
            $.each(data, function (key, val) {
                self.locations.push(ko.mapping.fromJS(val));
            });
        });

返回的数据示例可能如下所示(为简洁起见):
[{"LocationId":1,"DisplayName":"Starbucks","Address":"123 Main St."}]

这工作正常,我在其他地方使用过相同的代码。

我还有一个绑定(bind)到 observableArray 的多选列表。如果我以这种方式编写选择,使用“DisplayName”作为选项文本:,它可以正常工作:
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: 'DisplayName'"></select>

同样,如果我将 DisplayName 作为函数返回,它仍然有效:
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: function (item) { return item.DisplayName }"></select>

但是——如果我尝试添加另一个参数——它会失败。我在 UI 中看到的只是“未定义”。
<select multiple="multiple" data-bind="options: locations, selectedOptions: selectedLocations, optionsText: function (item) { return item.DisplayName + ' | ' + item.Address }"></select>

还有一件事。如果我删除 AJAX 调用和映射,并在 JavaScript 中创建一个 Location 对象的 observableArray,那么最后的代码就可以正常工作。

我错过了什么?

最佳答案

你有没有尝试过 :

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

因为 ko.mapping.fromJS(val) 将 DisplayName 和 Address 转换为 observables。

关于knockout.js - KnockoutJS 在使用自定义选项时遇到问题Text : on ko. mapping.fromJS 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626368/

相关文章:

javascript - 在映射过程中使用外部函数计算 knockout 变量

javascript - 如何在knockout js中根据数组值检查复选框

knockout.js - 使用 Durandal 在一个页面中多个独立 SPA

javascript - 使用 JavaScript 或 jQuery 伪造滚动条

javascript - 如何在 knockout.js foreach 绑定(bind)中有条件地呈现 tr

javascript - 当用户提交时更新 observableArray 中的记录,而不是自动使用 KnockoutJS

javascript - Angular2 版本的 knockout 的 computed observable

javascript - Knockout js观察全局变量

javascript - 是否可以将 child 作为参数传递给 ko 计算函数

javascript - HTML 页面中的 knockout 条件