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