Ember.js 更新:无法从具有promies的服务的计算属性更新控制器的计算属性

Ember.js 更新:无法从具有promies的服务的计算属性更新控制器的计算属性,ember.js,Ember.js,电源选择]。我传递给power select的选项来自服务。选项数组具有重复的值,我尝试在控制器中删除这些值。 我已经做了一个旋转放置,因为它余烬旋转不支持插件(余烬力量选择)到现在为止。我稍微修改了一下 twiddle中的注释代码就是我在桌面上看到的。此代码在tweedle中有效,但在我的计算机上不起作用 问题:下拉列表值在模板上不可见 import Ember from 'ember'; const { get, set, compute

电源选择]。我传递给power select的选项来自服务。选项数组具有重复的值,我尝试在控制器中删除这些值。 我已经做了一个旋转放置,因为它余烬旋转不支持插件(余烬力量选择)到现在为止。我稍微修改了一下

twiddle中的注释代码就是我在桌面上看到的。此代码在tweedle中有效,但在我的计算机上不起作用

问题:下拉列表值在模板上不可见

    import Ember from 'ember';
    const {
      get,
      set,
      computed
    } = Ember;
    export default Ember.Service.extend({

      locations: computed(function(){
        var self = this;

        return get(this,'store')
            .findAll('store')
            .then(stores =>{
                let locs = stores.map(store => {
                     return get(store,'adminAreaLevel2') +" "+ get(store,'adminAreaLevel1')
            });
                set(self,'locations',locs);
          });

});
控制器中的代码是

//Controller
import Ember from 'ember';
const {
  inject: { service },
  computed: { uniq }
}=Ember;

export default Ember.Controller.extend({
   dropData: service('my-service'),
  dropLocation: uniq('dropData.locations')
});

我不能在twiddle中包含的电源选择代码

{{#power-select
      options=dropLocation
      selected=selectedLoc
      matcher=locMatcher
      onchange=(action "selectLoc") as |loc|}}
      {{first-caps loc}}
    {{/power-select}}
  {{/bs-form-group}} 
更新 您好@Bek谢谢您的解决方案,有人在ember slack社区向我推荐了相同的解决方案。此解决方案的问题是
dropLocation:uniq('dropData.locations')
无法更新,因为uniq不能正确使用promise数组。我想出了一个难看的解决办法,但它奏效了

dropLocation: Ember.computed('dropData.locations',function(){

return this.get('dropData.locations')
.then(data => data.uniq()); 
})

寻找好的解决方案

您无法观察到承诺本身的变化,您可以使用(或PromiseArray)包装您的承诺,使其可见

var promise = Ember.RSVP.resolve({ name: 'mario' });
var object = Ds.PromiseObject({ promise });
现在,在模板中,您可以像这样使用它:

{{object.name}} // mario
确保promise返回的对象不是原语(或PromiseArray的数组)

在您的情况下,它应该如下所示:

locations: computed(function(){
    var promise = get(this,'store')
        .findAll('store')
        .then(stores =>{
            let locs = stores.map(store => {
                 return get(store,'adminAreaLevel2') +" "+ get(store,'adminAreaLevel1')
            });
            return locs;
        });
    return DS.PromiseArray.create({ promise });
});

如果您使用ember inspector检查服务,数据是否存在?顺便问一下,是哪个版本的余烬、余烬数据、余烬CLI、余烬电源选择等。。你在用什么?