2016-01-05 42 views
0

功率选] 1的服务的计算属性控制器的计算性能。我通过选择的选项来自服务。选项数组有重复值,我试图在我的控制器中删除。 我已经做了一个旋转,因为它的捻转不支持addonss(烬能量选择)到现在。我已经修改它一点点 Ember twiddle更新:无法更新从具有promies

在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') 
}); 

电源选码,我不能在玩弄包括

{{#power-select 
     options=dropLocation 
     selected=selectedLoc 
     matcher=locMatcher 
     onchange=(action "selectLoc") as |loc|}} 
     {{first-caps loc}} 
    {{/power-select}} 
    {{/bs-form-group}} 

最新通报 嗨@Bek感谢解决某一个建议我同在烬松弛社区。这个解决方案的问题是dropLocation: uniq('dropData.locations')没有得到更新,因为uniq不能正确使用promise数组。我提出了丑陋的解决方案,但它的工作。

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

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

寻找良好的解决方案

+0

如果您检查与Ember检查服务,是数据呢?顺便说一句,......你用哪个灰烬,灰烬数据,恩贝尔CLI,恩贝尔功率选择,等的版本? –

回答

0

你不能遵守有关承诺本身的变化可以用PromiseObject(或PromiseArray)来包装你的承诺,以便它是可观察的。

var promise = Ember.RSVP.resolve({ name: 'mario' }); 
var object = Ds.PromiseObject({ promise }); 

现在在你的模板,你可以使用它像:

{{object.name}} // mario 

确保你的诺言返回对象不是原始的(或数组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 }); 
});