我看到了Ember模型Book
:
export default Model.extend({
title: attr('string'),
});
可以访问该书的标题属性:book.get('title');
。
这种表示法似乎很复杂且容易出错(没有IDE支持)。为什么无法访问属性,如:
book.title
book.title()
?是否有技术上的理由要做到这一点,或者它只是"好方法"在JS中做到这一点?
我希望这个问题不是愚蠢的,我对这些JS框架很陌生。
感谢。
答案 0 :(得分:1)
答案有点复杂。我会尝试尽可能简洁地解释它。可以计算和观察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')时;如果财产被观察,计算或者是否在链条中使用道具,我根本不必担心。这也确保了绑定和所有内置的余烬都能正常工作。
Ember的原则之一是调用者不需要担心余烬金属内部如何工作或处理对象。
同样使用.get()和.set()约定遵循Uniform access principle
希望这会有所帮助。