我看到给定一个 Ember 模型Book
:
export default Model.extend({
title: attr('string'),
});
可以通过以下方式访问图书的 title 属性:book.get('title');
。
这种表示法看起来很复杂并且容易出错(没有 IDE 支持)。为什么无法访问属性,例如:
书名
- 甚至
book.title()
?
这样做有技术原因吗,或者只是在 JS 中这样做的“好方法”?
我希望这个问题并不愚蠢,我对那些 JS 框架还很陌生。
谢谢。
最佳答案
答案有点复杂。我将尝试尽可能简洁地解释它。 Ember 中的属性可以被计算和观察。例如,在您的示例中,如果我这样做:
export default Model.extend({
title: DS.attr('string'),
author: DS.attr('string'),
displayName: function(){
return this.get('title') + " By: " + this.get('author');
}.property('title','author')
});
现在我有一个计算属性,它依赖于其他两个属性。所以当我调用 get('displayName'); 时我完全不必担心属性是否被观察、计算或者属性是否在链中使用。这也确保了绑定(bind)和所有内置的 ember 东西都能正常工作。
Ember 的原则之一是调用者不需要担心 ember-metal 内部如何工作或处理对象。
使用 .get() 和 .set() 约定也遵守 Uniform access principle
希望这有帮助。
关于javascript - Ember JS 属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078219/