道歉,如果已经提到或回答过但我已经找了几天而且无法解决这个问题。我是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"}}]};
我希望将上述县作为select语句中的项目显示,其值设置为1,文本显示为国家/地区。但是我似乎无法为我做这个淘汰赛。我相信对于那些熟悉淘汰赛的人来说这是一个简单的问题,但是我无法理解该怎么做我看到的只是对象列表但不知道如何访问data-bind上的对象属性
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/来展示正在发生的事情,通过这个小挑战可以获得任何帮助
答案 0 :(得分:2)
您的数据结构奇怪。就像这样:
- countries - Country - id - country
实际id
和country
是countries
数组深处的另一个级别。你必须做一些黑客攻击才能让那些按原样出现在select元素中。如果你只是映射到内部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);
答案 1 :(得分:1)
你有非常复杂的数组结构。对于您的情况,您必须在'Country.country'
绑定中编写options
但它不起作用,因为绑定无法解析这种复杂的表达式。您可以使用options
:
optionsText
和foreach
绑定
这是工作小提琴:http://jsfiddle.net/vyshniakov/jbrr5/18/
但我建议您将数据结构更改为
{"countries":[{"id":"1","country":"England"}]};
或相应地映射数据。在这种情况下,您可以使用options
绑定:
<select data-bind="options:countries, optionsText:'country', optionsValue:'id'"></select>