0

別のコントローラーからフェッチしたコンテンツをループして、いくつかのプロパティを変更しようとしていますforEach()。ただし、これは機能せず、forEachループでプロパティを取得しようとすると が返されますundefined
だからここに私がやろうとしたことがあります:

  • でコンテンツを取得していthis.get("controllers.index.arrangedContent")ます。
    コンテンツは、local-storage-adapter で保存されるレコードの配列です。
  • 私のモデル:

    App.Data = DS.Model.extend({  
    name: DS.attr('string')  
    });
    

私のコントローラーで:

App.StartController = Ember.ObjectController.extend({
needs: 'index',
alert: function() {
    // get the "content" from the IndexController;
    var names = this.get("controllers.index.arrangedContent");
    var formattedNames = [];

    names.forEach(function(item) {
    var name = item.name; // <--returns "undefined"
    name += "!";
    formattedNames.push(name);
   });

   alert(formattedNames[0] );   
}
});

質問forEach:モデルに格納されている正しい値を返すループ 内のプロパティ「name」にアクセスする方法はありますか?

注: 最初は、これはローカル ストレージ アダプターのバグだと思ったので、バックエンドの "フィクスチャ アダプター" で同じことを試みましたが、これも機能しません。
ただし、ルーターでいくつかのモデル インスタンスを次のようにハードコーディングすると、次のようになります。

App.IndexRoute = Ember.Route.extend({
model: function() {
    return [Ember.Object.create({id: 523, name: "John"}),
            Ember.Object.create({id: 534, name: "Warren"}),
            Ember.Object.create({id: 234, name: "Katy" })
     ];
}
});  

forEachループ内で name プロパティを取得すると機能します。ember-data を使用しているときにこれが機能しないのはなぜですか?

ヒント/提案は大歓迎です!ありがとう!

4

1 に答える 1

5

コンテンツにアクセスするには、常にアクセサー (get/set) メソッドを使用する必要があります。

var name = item.get('name');

あなたが達成したいことのために、より良い方法があります:

var formattedNames = names.map(function(item, index, enumerable) {
    return item.get('name') + "!";
});
于 2013-06-13T16:15:44.513 に答える