【发布时间】:2015-09-02 23:22:20
【问题描述】:
我正在使用带有映射插件的淘汰赛 JS:
https://github.com/SteveSanderson/knockout.mapping/tree/master/build/output
我似乎无法访问数据。
这是一个纯敲除和纯 JSON 的工作示例:
http://jsfiddle.net/u0hv6wxe/2/
这是一个不完整的示例,其中敲除和映射不呈现任何内容:
http://jsfiddle.net/95zztzkq/1/
我使用映射的原因是为了防止创建具有来自 ajax 的数千个属性的模型。
插件文档:
http://knockoutjs.com/documentation/plugins-mapping.html
JS:
var initialData = {
'@type': 'type1',
'contents': [
{
'@type' : 'type2',
'stringx': 'test'
},
{
'@type' : 'type2',
'stringx': 'test2'
}
]
};
defaultData = ko.mapping.fromJS(initialData);
ko.applyBindings(defaultData);
console.log(defaultData['@type']());
console.log(defaultData.contents()[0]['@type']());
console.log(defaultData.contents()[1]['@type']());
模板:
<!-- ko template: { name: 'mainTemplate', data: $data } --><!-- /ko -->
<script id="mainTemplate" type="text/html">
<!-- ko if: ($data['@type']=='type1') -->
<div class="Page">
PageTest
<!-- ko if: ($data.contents) -->
<!-- ko template: { name: 'mainTemplate', foreach: $data.contents } -->
<!-- /ko -->
<!-- /ko -->
</div>
<!-- /ko -->
<!-- ko if: ($data['@type']=='type2') -->
<div class="test">
StringTest <span data-bind="text: stringx"></span>
</div>
<!-- /ko -->
</script>
我在这个问题上被困了 2 天,非常感谢所有帮助!
谢谢:)
【问题讨论】:
-
在读取 view 中的值时使用
()。它将解决问题在这里工作小提琴jsfiddle.net/95zztzkq/4。 -
@supercool 我自己也得出了同样的结论——在表达式中访问 observable 时缺少括号,这似乎导致了这里的问题。我会把它作为答案发布
-
@JamesThorpe 是的,问题很小。嗯,我发布了答案:) 干杯
标签: javascript ajax knockout.js knockout-mapping-plugin