javascript - Knockout 未将 Json 绑定(bind)到多个 Select

标签 javascript json knockout.js

我无法使用 Knockout 将 json 数据绑定(bind)到选择列表。发生的情况是,选择列表是使用每个 json 记录的选项创建的,但它不会将任何数据绑定(bind)到列表。本质上它是一堆空选项。我什至可以在 applyBindings() 之后通过控制台看到 View 模型中的数据,所以我知道数据在那里。我是 knockout 新手,所以我可能会错过一些东西。请帮忙

var resources = [{"Resource":{"Id":1,"Name":"Bob"}},{"Resource":{"Id":2,"Name":"Jim"}}];

var viewModel = { resourceList: ko.observableArray(resources)}
ko.applyBindings(viewModel);


<select multiple="multiple" data-bind="options: resourceList, optionsText: 'Name', optionsValue: 'Id'">

最佳答案

resourceList 中的对象不包含 NameId 属性,它们包含一个 Resource 对象,该对象确实如此。

您需要将每个资源投影到这些对象并绑定(bind)到该对象:

var viewModel = {
    resourceList: ko.observableArray(resources),
    resourceListProjection: ko.dependentObservable(function () {
        return ko.utils.arrayMap(this.resourceList(), function (o) {
            return o.Resource;
        });
    }, viewModel);
};

或者创建访问器函数来获取适当的属性。

<select multiple="multiple"
    data-bind="options: resourceList,
               optionsText: function (o) { return o.Resource.Name; },
               optionsValue: function (o) { return o.Resource.Id; }">

关于javascript - Knockout 未将 Json 绑定(bind)到多个 Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501895/

相关文章:

knockout.js - 动态添加的 Knockout data-bind 属性不会触发 click 事件处理程序

javascript - 如何获取firebase id

json - 在已使用引号的 sudo 封装的 sed 命令上使用引号

php - 如何使用 php - mysql 进行 ajax 长轮询

knockout.js - 在 knockout 绑定(bind)中为子级设置选项卡索引

knockout.js - 如何提高单页应用的SEO

javascript - 类型 'File' 的参数不可分配给类型 'string' 的参数

javascript - 轻松将客户端 JS 中生成的内容保存到 Google Drive 中的文件中

javascript - 滚动到具有固定高度的 div 内的元素

java - 我在使用 ajax 将 json 数据发送到 Controller 时遇到问题