功率选] 1。我传递给电源选择的选项来自服务。选项数组有重复值,我试图在我的控制器中删除。 我做了一个旋转,因为它直到现在还没有支持addonss(ember-power-select)。我稍微修改了一下 Ember twiddle
twiddle中的注释代码就是我在桌面上的内容。此代码适用于tweedle,但在我的计算机上不起作用。
问题:dropDown值在模板上不可见
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感谢解决方案,有人建议我在ember slack社区。此解决方案的问题是dropLocation: uniq('dropData.locations')
没有得到更新,因为uniq无法正确使用promise数组。我提出了丑陋的解决方案,但它有效。
dropLocation: Ember.computed('dropData.locations',function(){
return this.get('dropData.locations')
.then(data => data.uniq());
})
寻找好的解决方案
答案 0 :(得分:0)
您无法观察承诺本身的变化,您可以使用PromiseObject(或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 });
});