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')]
   })
})

但我似乎总是在 map 函数上遇到 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/

我将承诺代码移至路线的 afterModel 挂钩,承诺友好https://gist.github.com/machty/5723945

我还更改了 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 回答