3

これはフォローアップです: ember.js で別のモデルのデータにアクセスする

選択した複数選択ボックスでリストをフィルタリングしたい状況があります。データを送信するときは、this.store.find('tag')常に DS.PromiseArray を返します。Ember.Select はこれをうまく処理しているようですが、選択された複数選択はそれを気に入っていないようです。私はこのようなものを見てきました:

this.store.find('tag').then(function(items) {
   return items.map(function(item){
      return [item.get('id'), item.get('name')]
   })
})

しかし、マップ関数で常に typeerror{} が発生するようです...

問題の概要を示す jsfiddle は次のとおりです。 http://jsfiddle.net/viciousfish/TEZjW/

ボーナスポイント!デモでは、選択した選択を単一の選択として示しています (わかりやすくするため)。これをマルチセレクトとして使いたいのですが、これは設定multiple: trueで設定できますApp.MultipleSelect

ここでの更新は、私がうまくいくはずだと思う別の jsfiddle ですが、うまくいかないようです! http://jsfiddle.net/viciousfish/FZ6yw/1/

さらに、このフィドルは、.then が promiseArray http://jsfiddle.net/marciojunior/DGT5L/を分解するために機能することを示しています。

4

1 に答える 1

6

ここに機能的なjsfiddleがありますhttp://jsfiddle.net/FZ6yw/2/

promise フレンドリーなhttps://gist.github.com/machty/5723945であるように、promise コードをルートの afterModel フックに移動しました。

map 関数も変更しました。配列を返していましたが、私のコードではオブジェクトを返します

App.AssetsRoute = Ember.Route.extend({
  model: function () {
    return this.store.find('asset');
  },
  afterModel: function () {
    var self = this;
    return this.store.find('tag').then(function(items) {
       var allTags = items.map(function(item){
           return {id:item.get('id'), name:item.get('name')};
       });
       self.controllerFor('tags').set('content', allTags);
    })
  },
});
于 2013-10-17T09:44:18.380 に答える