.bind VS在奥里利亚
在我们的代码基础线插补我们有以下的混合物:.bind VS在奥里利亚
- 属性= “$ {}的东西”,属性= “$ {东西|转换器}”,等等。
- attribute.bind = “东西”,attribute.bind = “东西|转换器”
我觉得后者更容易阅读。
我提到的例子与上面完全一样;即它们不添加任何附加的字符串内容。
我认为在Aurelia上也比较容易。我对么?
此外,对于这些不涉及实际插值的具体情况,涉及到第一种形式还有什么好处? (除了它是 键入两个字符。)
鉴于你所示的例子,我会推荐使用选项2.它真的不是“在Aurelia上更容易”,但它更明确,你是将该属性的值绑定到列出的属性。
原来的答案下面
第一个选项的好处是当你有,例如,一个属性,它接受许多值,但作为一个单一的字符串。最常见的例子是class
属性。该class
属性接受一个空格分隔的列表中的多个类:
<div class="foo bar baz"></div>
假设我们只想增加或从基于道具我们的VM someProp
同时使其他类此列表中删除类baz
。要使用.bind
语法执行此操作,我们必须在具有完整列表的虚拟机上创建一个属性,但会添加或删除由值someProp
确定的baz
。但是,使用插值结合的字符串,这变得简单多了:
<div class="foo bar ${someProp ? 'baz' : ''}"></div>
你可以想像这可能与多个类别进行扩展添加或删除。你可以创建一个值转换器来使用.bind
语法来完成这项工作,但最终可能会导致某些内容不可读。
我能想象一个值转换器创建,可能看起来像这样使用:
<div class.bind="someProp | toggleClass:'baz':'foo':bar'"></div>
我真的认为这是比使用串插语法可读的要少得多。
顺便说一句,值转换器上面我想象中应该是这样的:
export class ToggleClassValueConverter {
toView(value, toggledClass, ...otherProps) {
return `${otherProps.join(' ')} ${value ? toggledClass : ''}`;
}
}
最好的部分是,我仍然使用串插在值转换器:-)
后通过我已经打开的选项卡涉水,我发现这一点。虽然它不是完全一样的东西,这是一个有点老了,有一个类似的事情,谈到了https://github.com/aurelia/templating-binding/issues/24#issuecomment-168112829由Danyow先生(重点煤矿)
是的,绑定的行为符号为&(而不是|用于价值转换器)。
<input type="text" data-original="${name & oneTime}" value.bind="name" />
这里写一次性结合的标准方法。 这将是一个有点轻量的分析方面和有约束力的:
<input type="text" data-original.one-time="name" value.bind="name" />
我不知道这是否适用于.bind/$ {name}的情况下,以及这个例子中的onetime,但是如果涉及到他的注意力,他可以说任何一种方式。
鉴于这是不是一个添油加醋的答案,我会标志阿什利是作为答案,因为它证实了易读性问题,并提供有关其他使用情况的有用信息上类似的术语应当别人搜索。
我会在这里推迟到杰里米。他绝对是专家。 –
“我所指的例子是像上面,他们不添加任何额外的字符串内容。” :) 所以在问题的案件总是形式=“$ {...}”的,他们不喜欢的东西类=“class1的$ {...}”,这我同意将是一个良好的使用插值情况。 – Dave
是的,但你问是否有任何好处的字符串插值形式,所以我举了一个例子,它更简单的使用它。 –
我以为我在问题中明确表达了我正在具体询问字符串没有实际插入的情况。我会重新修改它以使其更加明显。干杯。 – Dave