Knockout没有将Json绑定到多个Select

时间:2014-07-01 03:00:36

标签: javascript json knockout.js

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

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'">

1 个答案:

答案 0 :(得分:1)

resourceList中的对象不包含NameId属性,它们包含Resource对象。

您需要将每个资源投射到这些对象并绑定到该对象:

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; }">