Ember 2,使用诸如 ember-truth-helpers 之类的插件进行表演,而不仅仅是 Ember 默认方式

Posted

技术标签:

【中文标题】Ember 2,使用诸如 ember-truth-helpers 之类的插件进行表演,而不仅仅是 Ember 默认方式【英文标题】:Ember 2, Performances using plugin like ember-truth-helpers instead of just the Ember default way 【发布时间】:2017-12-21 22:19:24 【问题描述】:

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

比方说,有很多,

#if (eq model.beautiful true)

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

Ember 在后台创建什么? computedProperties 的相同 javascript 工作如下:

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

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

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

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

而不仅仅是这个:

#if isBeautifulOrCrazy

就性能而言,最好的解决方案是什么?

【问题讨论】:

【参考方案1】:

性能差异可以忽略不计。如果你有很多条件逻辑,使用计算属性会更干净。对于简单的条件,只需进行一两次比较,使用助手就可以了。

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

Ember 在后台创建什么?

我们来看一个例子:eq

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

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

这是从Ember 调用的emberIsEqual() 方法。

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;

【讨论】:

【参考方案2】:

我认为用户不会注意到任何差异。我的选择是尽可能减少代码和更好的可维护性。在您的情况下,如果您有超过 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。

【讨论】:

以上是关于Ember 2,使用诸如 ember-truth-helpers 之类的插件进行表演,而不仅仅是 Ember 默认方式的主要内容,如果未能解决你的问题,请参考以下文章

使用通过 ember-cli 创建的应用程序获取“未捕获的错误:断言失败:Ember 视图需要 1.7 和 2.1 之间的 jQuery”

使用带有 Ajax 查询的预先输入时出现 ember-select-2 问题

使用带有 Ajax 查询的预先输入时出现 ember-select-2 问题

MVC架构

Ember Mirage 没有将模型作为 ember 对象传递

如何创建特定于 ember 版本的项目?