Ember.js高级使用计算属性

时间:2013-05-15 15:59:08

标签: ember.js

我一直在查看https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/computed.js#L482,我已经看到计算属性实际上更强大,它们已在指南中记录。

一些非常有用的简单用例是:

Ember.Object.create({
  propertyA: Ember.computed.empty('anotherProperty'),
  propertyB: Ember.computed.not('anotherProperty'),
  propertyB: Ember.computed.equal('anotherProperty', "Ed Balls")
});

但我并不了解更高级的案例如何运作:https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/computed.js#L617

我真的可以使用一些澄清 - 我怀疑我可能正在编写一个大量的样板文件,我可以避免使用它们:笑脸:。

一旦我了解它们的工作原理,我绝对可以尝试向指南添加一些文档。

1 个答案:

答案 0 :(得分:1)

有些用例(虽然不是那么高级但只是微不足道)看起来像:

...
// this could be in your controller
hasPost: Ember.computed.bool('content.post')
hasComments: Ember.computed.bool('content.post.comments')
showComments: Ember.computed.and('hasPost', 'hasComments')
// here you could perfectly bind on the showComments property
...

你应该强调的一件事是CP不能链(现在),所以这可能限制了它最先进的使用情况。但是,如果他们可以连锁,那么你可以做类似的事情:

...
// not possible at the moment
showComments: Ember.computed.bool('content.post') && Ember.computed.bool('content.post.comments')
...

可以找到一些用例(尽管只有测试用例)here。 这个issue可能也很有意思。

希望有所帮助