在模板中行走一个对象

时间:2013-08-08 08:36:57

标签: ember.js

我的一个数据模型具有以下数据结构:

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

但我有两个问题:

  1. “断言失败:#each循环的值必须是一个数组。你传递了[object Object]”
  2. 如何获取价值?我的印象是this.properties.locator_map[locator]无效。
  3. 知道怎么走这个对象吗?

2 个答案:

答案 0 :(得分:1)

这不起作用的原因是因为几乎Ember框架中的所有内容都延伸到Ember.Object但你的locator没有,所以你有两个选择:

  1. 创建自定义句柄{{#each}}帮助程序,处理您的非Ember.Object
  2. 解析从后端返回的数据并将locator_map对象转换为Ember.Object,这样可以使对象也具有绑定意识等。
  3. 另见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}}