computed.oneWay不使用Ember Data

时间:2015-06-14 14:03:53

标签: ember.js ember-data

我有一个EmberData快照,我想用一些额外的属性装饰,然后交给UI进行演示。此装饰将设置Ember-Data记录的“属性”而不是实际属性。它看起来像这样:

let foo = Ember.computed.oneWay(this.get('store').find('activity')); 
foo.map(item => {
    item.set('foobar', 'baz');
    return item;
}

我希望foo将成为承诺记录的受益者(它是)并且foobar属性的设置将被本地化为foo属性(它不是,它似乎全局范围到记录的属性)。

2 个答案:

答案 0 :(得分:0)

至于我,这是预期的行为。

1)OneWay表示只有set方法不绑定foo方法。它曾用于在对象的属性之间工作,但this.get('store').find('activity')只是一个承诺。

2)foostore.find() DS.RecordArray类型的结果(假设承诺已解决)。因此,您正在迭代返回的记录并在其上设置foobar属性。

实现目标,您可以通过activity(Ember 2.0方式)装饰component记录以进行UI演示。

答案 1 :(得分:0)

到目前为止,我能够做到这一点的唯一方法是使用Ember的ObjectProxy,如下所示:

const FooDecorator = Ember.ObjectProxy.extend({
    foobar: 'baz'
});    
let foo = Ember.computed(function() {
    return this.get('store').find('activity').map(item => {
        FooDecorator.create({content: item});
    });
}

这有效,但我认为我听说过对象代理不是Ember 2.0路线图的一个受欢迎的部分,所以不确定这种方法是否最好。我会在结束前保持开放几天。