是否有更短的方法来编写Ember计算/获取方法?

时间:2017-10-17 15:30:59

标签: javascript ember.js ecmascript-6

是否有一个简短的方法来编写下面的代码(来自 Rock& Roll with Ember.js 一书):

export default Ember.Controller.extend({
  noSongs: Ember.computed('model.songs.length', function() {
    return this.get('model.songs.length') === 0;
  }),
  (...)
});

我认为我可以对Controllergetcomputed的导入进行解构:

import { Controller, get, computed } from 'ember';

问题

  • 我可以在computed内使用箭头功能代替function吗?
  • 是否有更多javascript-ish方式来执行this.get('model.songs.length'),因为将length作为字符串感觉很尴尬?

3 个答案:

答案 0 :(得分:4)

  

我认为我可以对Controllergetcomputed的导入进行解构:

您可以使用2.16 release blog post

中详述的新模块API
  

我可以在computed内使用箭头功能代替function吗?

不,因为该箭头函数的上下文实际上是周围的模块,而不是对象。请注意,Ember.Controller.extend接收对象作为参数,而不是函数,并且它不是ES2015引入的class语法。

  

是否有更多javascript-ish方式来执行this.get('model.songs.length'),因为将长度作为字符串感觉很尴尬?

长度不是字符串,它是应该具有数值的model.songs数组的属性。您应该在Ember对象中使用.get,否则您将无法检索计算属性。

答案 1 :(得分:1)

  

我可以在计算机中使用箭头函数而不是函数吗?

不,你不能。

  

是否有更多javascript-ish方法   this.get('model.songs.length')因为长度为a感觉很尴尬   字符串?

恕我直言,这看起来还不错。

答案 2 :(得分:1)

  

我可以在计算机中使用箭头函数而不是函数吗?

作为computed()方法的第二个参数传递的函数在Ember的内容中被用作创建Ember属性描述符对象的属性。稍后调用它时(从内部调用)Ember会尝试为其分配正确的上下文(在本例中为Controller),但箭头函数不支持使用上下文调用,因此它们只会在上下文中运行他们被调用的地方。

  

是否有更多的javascript-ish方法来执行此操作。(' model.songs.length')因为将长度作为字符串感觉很尴尬?

那个Ember。在你使用了它一千万次后,它会感觉很自然。