Ember 2,使用ember-truth-helpers等插件而不仅仅是Ember默认方式

时间:2017-07-17 11:33:56

标签: javascript performance ember.js ember-data computed-properties

如果我使用此插件:https://github.com/jmurphyau/ember-truth-helpers

有许多人,比方说,

{{#if (eq model.beautiful true) }}

{{#if (or (eq model.beautiful true) (eq model.crazy true) ) }}

Ember在后台创作的是什么?相同的javascript可以运行如下的computedProperties:

isBeautiful: Ember.computed.equal('model.beautiful', true);等等?

如果我有30个computedProperty(Ember宏和自定义宏),最好使用这个插件或默认的Ember方式吗?

我很想知道,因为在某些模板中,我可以多次使用这样的东西!:

{{#if (or (eq model.beautiful true) (eq model.crazy true) ) }}

而不只是这一个:

{{#if isBeautifulOrCrazy }}

在表现方面,最佳解决方案是什么?

2 个答案:

答案 0 :(得分:0)

我认为用户不会注意到任何差异。我的选择是尽可能少的代码和更好的可维护性。在你的情况下,如果你有超过3个相同的行{{#if (or (eq model.beautiful true) (eq model.crazy true) ) }},我会建议计算属性。它将使模板更加简单,控制器变得更小。如果您在几个模板中具有相同的确切线,则可以在模型上创建计算属性,因此它将为{{#if model.isBeautifulOrCrazy }}。或模板助手。

  

Ember在后台创作的是什么?

任何助手都只是一个返回某个值的函数。 eq助手将如下所示:

function eq([l, r]) {
  return l === r;
}

当ember渲染模板时,它会评估此函数,然后使用它的值。如果其中一个参数发生了变化,就会发生重新渲染。我认为,它与CP类似。

答案 1 :(得分:0)

性能差异可以忽略不计。如果你有很多条件逻辑,那么使用计算属性会更清晰。对于简单的条件,通过一次或两次比较,使用助手就可以了。

ember-truth-helpers提供了一些简单的帮助,因此您不必自己编写。如果您愿意,您可以简单地创建自己的帮助者,特别是如果您不喜欢ember-truth-helpers比较值的方式。对于大多数人来说,ember-truth-helpers完全符合他们的要求。

  

Ember在后台创作的是什么?

让我们来看一个例子:eq

以下是ember-truth-helpers正在做的事情:

export function isEqual([a, b]) {
  return emberIsEqual(a, b);
}

以下是emberIsEqual()来自Ember的{​​{1}}方法。

export default function isEqual(a, b) {
  if (a && typeof a.isEqual === 'function') {
    return a.isEqual(b);
  }

  if (a instanceof Date && b instanceof Date) {
    return a.getTime() === b.getTime();
  }

  return a === b;
}