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 问题