0

私のデータモデルの1つは、次のデータ構造を持っています:

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

しかし、私には2つの問題があります:

  1. 「アサーションに失敗しました: #each がループする値は配列でなければなりません。[オブジェクト オブジェクト] を渡しました」
  2. 値にアクセスするには?this.properties.locator_map[locator]うまくいかない印象があります。

オブジェクトを歩く方法はありますか?

4

2 に答える 2

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}}
于 2013-08-08T09:47:28.930 に答える
1

これが機能しない理由は、ember フレームワークのほとんどすべてが から拡張されているためですがEmber.Object、あなたlocatorの は拡張されていないため、2 つのオプションがあります。

  1. 非 を処理するカスタム ハンドルバー{{#each}}ヘルパーを作成Ember.Objectする
  2. バックエンドから返されたデータを解析し、locator_mapオブジェクトを に変換すると、オブジェクトがEmber.Objectバインド対応になります。

同様のケースを扱っている最近回答したこの回答も参照してください。

それが役に立てば幸い。

于 2013-08-08T08:59:42.250 に答える