如果我使用此插件: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 }}
在表现方面,最佳解决方案是什么?
答案 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;
}