javascript - Ember JS 属性访问器

标签 javascript ember.js

我看到给定一个 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/

相关文章:

javascript - 谷歌地图 JS API 显示蓝色焦点边框

jquery - 在 Ember-cli 中使用 jquery

javascript - 如何从 ArrayController 访问 ItemController

javascript - 为什么我的 Ember 模板不呈现?

javascript - 在 JavaScript 中从 Firebase 中删除特定 Node

javascript - XSLT下拉菜单不调用javascript函数

javascript - node.js 同步执行系统命令

javascript - 使用 mapbox-gl-js 为特征集合中的每个特征添加自定义图标

javascript - 当两个条件不满足时禁用发送按钮在 ember.js 中不起作用

javascript - Foundation 5 下拉菜单在可滚动表格行中未对齐