代码之家  ›  专栏  ›  技术社区  ›  Édouard Lopez

有没有一种较短的方法来编写Ember计算/获取方法?

  •  1
  • Édouard Lopez  · 技术社区  · 8 年前

    有没有一种简单的方法来编写下面的代码(从 书籍):

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

    我想我可以为 Controller , get computed :

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

    问题

    • 我可以在中使用箭头功能吗 计算的 function ?
    • 还有更像javascript的方法吗 this.get('model.songs.length') 因为我觉得很尴尬 length 作为字符串?
    3 回复  |  直到 8 年前
        1
  •  4
  •   locks    8 年前

    我想我可以为 Controller , get computed

    您可以使用新的模块API,详见 2.16 release blog post .

    我可以在中使用箭头功能吗 计算的 而不是 function ?

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

    还有更像javascript的方法吗 this.get('model.songs.length') 因为把长度作为一根绳子感觉很尴尬?

    model.songs 应具有数值的数组。你应该使用 .get 否则,您将无法检索计算属性。

        2
  •  1
  •   Ember Freak    8 年前

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

    不,你不能。

    还有更像javascript的方法吗

    我觉得这看起来不错。

        3
  •  1
  •   pjfingers    8 年前

    作为第二个参数传递给 computed() 方法在创建Ember属性描述符对象时作为属性在Ember的内部使用。当稍后调用时(从下到下),Ember会尝试为其分配适当的上下文(在本例中是您的控制器),但arrow函数不支持使用上下文调用,因此它们只会在从何处调用的上下文中运行。

    有没有更像javascript的方法来实现这一点。得到('model.songs.length')作为字符串的长度感觉很尴尬?