我的一个数据模型具有以下数据结构:
properties : {
....
locator_map : {
locator1 : locator_doc_id1,
locator2 : locator_doc_id2,
...
locatorN : locator_doc_idN,
},
...
}
在我的模板中,我想提供指向这些文档的链接,但我不知道如何遍历对象locator_map
。我想在这些方面做点什么:
{{#each locator in this.properties.locator_map}}
{{#linkTo "locators.show" this.properties.locator_map[locator]}}locator{{/linkTo}}
{{/each}}
但我有两个问题:
this.properties.locator_map[locator]
无效。知道怎么走这个对象吗?
答案 0 :(得分:1)
这不起作用的原因是因为几乎Ember框架中的所有内容都延伸到Ember.Object
但你的locator
没有,所以你有两个选择:
{{#each}}
帮助程序,处理您的非Ember.Object
locator_map
对象转换为Ember.Object
,这样可以使对象也具有绑定意识等。另见answer我最近回答了哪些涉及类似案例。
希望它有所帮助。
答案 1 :(得分:1)
正如@intuitivepixel建议的那样,这是我的变换:
// Used to represent a generic key:value mapping
DS.RESTAdapter.registerTransform('dict', {
serialize: function(data) {
var dict = {}, element;
for (var i = 0; i < data.length; i++) {
element = data[i];
dict[element.get('key')] = element.get('value');
}
return dict;
},
deserialize: function(dict) {
var data = Ember.A(), element;
for (var key in dict) {
data.push(Ember.create({ key: key, value: dict[key] }));
}
return data;
}
});
模特:
SettingsApp.ServiceProperties = SettingsApp.CommonProperties.extend({
locator_map : DS.attr('dict'),
});
SettingsApp.Service = DS.Model.extend(SettingsApp.NodeMixin, {
properties : DS.belongsTo('SettingsApp.ServiceProperties')
});
在模板上使用:
{{#each locator in this.properties.locator_map}}
{{#linkTo "locators.show" locator.value}}{{locator.key}}{{/linkTo}}
{{/each}}