3

抱歉,如果这已经被提及或回答,但我已经找了几天,无法解决这个问题。我是 Knockout 和 StackOverflow 的新手,所以请多多包涵。

我正在使用 CakePHP,并从我的控制器返回了一些 JSON,格式如下

{"countries":[{"Country":{"id":"1","country":"England"}},{"Country":{"id":"2","country":"Wales\/Cymru"}},{"Country":{"id":"3","country":"Scotland"}},{"Country":{"id":"4","country":"Republic of Ireland"}},{"Country":{"id":"5","country":"Northern Ireland"}}]};

我希望上述县在选择语句中显示为一个项目,其值设置为 1,文本显示为国家。但是,我似乎无法为我做到这一点。我相信这对于那些熟悉淘汰赛的人来说是一个简单的问题,但我不明白该怎么做我看到的只是对象列表,但不知道如何访问数据绑定上的对象属性

HTML

<select data-bind="options:countries, optionsText:'Country'"></select>​

Javascript

    var viewModel = {};

    var data = {"countries":[{"Country":{"id":"1","country":"England"}},{"Country":{"id":"2","country":"Wales\/Cymru"}},{"Country":{"id":"3","country":"Scotland"}},{"Country":{"id":"4","country":"Republic of Ireland"}},{"Country":{"id":"5","country":"Northern Ireland"}}]};

    var jsData = ko.mapping.fromJS(data);
    ko.applyBindings(jsData);

我创建了一个简单的 JSFiddle http://jsfiddle.net/jbrr5/14/来展示正在发生的事情,对于这个小挑战,我们将不胜感激

​</p>

4

2 回答 2

2

您的数据具有奇怪的结构。就像这样:

- 国家
  - 国家
    - ID
    - 国家

实际的idandcountry是数组中的另一个层次countries。您必须做一些修改才能让它们按原样出现在选择元素中。如果您只是映射到内部Country对象会更好。

var mappingOptions = {
    'countries': {
        'create': function (options) {
            // map to the inner `Country`
            return ko.mapping.fromJS(options.data.Country);
        }
    }
};

var viewModel = ko.mapping.fromJS(data, mappingOptions);
ko.applyBindings(viewModel);

更新的小提琴

于 2012-10-24T14:12:56.503 回答
1

你有非常复杂的数组结构。对于您的情况,您必须编写绑定'Country.country'options但它不起作用,因为绑定无法解析如此复杂的表达式。您可以使用而不是使用options和绑定:optionsTextforeach

这是工作小提琴:http: //jsfiddle.net/vyshniakov/jbrr5/18/

但我建议您将数据结构更改为

{"countries":[{"id":"1","country":"England"}]};

或相应地映射数据。在这种情况下,您可以使用options绑定:

<select data-bind="options:countries, optionsText:'country', optionsValue:'id'"></select>​
于 2012-10-24T14:13:04.927 回答