2015-06-14 54 views
0

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

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

那么我希望foo将所承诺的记录(这是)和foobar属性的设置的受益者将被定位于foo的属性(它不是,它似乎全球范围内的记录的属性)。

回答

0

至于我这是预期的行为。

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

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

实现你的目标,你可以装饰activity记录component(Ember 2.0的方式)为用户界面演示。

+0

你知道你引用的组件装饰器的一个很好的例子吗? – ken

+0

这可以帮助我,因为我记得在评论中有'数据下降行动'的例子,我认为它看起来对你很好。 https://gist.github.com/samselikoff/1d7300ce59d216fdaf97 – artych

+0

我没有在这里看到Decorator模式的示例 – ken

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路线图,所以不确定这种方法是否最好。在结束之前我会保持这个状态几天。