【问题标题】:.bind vs string interpolation in aurelia.bind 与 aurelia 中的字符串插值
【发布时间】:2017-02-15 01:51:15
【问题描述】:

在我们的代码库中,我们混合了以下内容:

  1. attribute="${something}"、attribute="${something | converter}" 等
  2. attribute.bind="something", attribute.bind="something | converter"

我发现后者更容易阅读。

我所指的例子与上面的完全一样;即,它们不添加任何额外的字符串内容。

我认为 Aurelia 也更容易。我说的对吗?

此外,对于这些没有实际插值的特定情况 涉及到,第一种形式有什么好处吗? (除了它是 少输入两个字符。)

【问题讨论】:

    标签: aurelia


    【解决方案1】:

    鉴于您展示的示例,我建议使用选项 2。这确实不是“在 Aurelia 上更容易”,但更明确的是您将该属性的值绑定到列出的属性。

    下面是原始答案

    第一个选项的好处是,例如,当您拥有一个接受多个值但作为单个字符串的属性时。最常见的例子是class 属性。 class 属性接受以空格分隔的列表中的多个类:

    <div class="foo bar baz"></div>
    

    想象一下,我们只想根据我们的 VM someProp 上的一个道具从这个列表中添加或删除类 baz,同时保留其他类。要使用.bind 语法执行此操作,我们必须在我们的VM 上创建一个属性,该属性具有完整列表,但添加或删除baz,由someProp 的值确定。但是使用字符串插值绑定,这变得简单多了:

     <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 : ''}`;
      }
    }
    

    最好的部分是我仍然在值转换器中使用字符串插值:-)

    【讨论】:

    • '我指的例子和上面一样,它们没有添加任何额外的字符串内容。' :) 所以有问题的案例总是形式为 =“${...}”,它们不是像 class="class1 ${...}" 这样的东西,我同意这将是一个很好的用例插值。
    • 是的,但是您问字符串插值形式是否有任何好处,所以我举了一个使用它更简单的示例。
    • 我想我已经在问题中明确表示,我专门询问了字符串实际上没有被插值的情况。我会改写它以使其更明显。干杯。
    • 我已经更新了答案以专门回答现在提出的问题。
    【解决方案2】:

    在浏览了我已经打开的标签后,我发现了这个。虽然不是完全一样的东西,而且有点老了,但 Danyow 先生在https://github.com/aurelia/templating-binding/issues/24#issuecomment-168112829 上谈到了类似的东西(强调我的)

    是的,绑定行为的符号是 &(而不是 | 用于值转换器)。

    &lt;input type="text" data-original="${name &amp; oneTime}" value.bind="name" /&gt;

    这是编写一次性绑定的标准方法。 这在解析和绑定方面会更轻量级

    &lt;input type="text" data-original.one-time="name" value.bind="name" /&gt;

    我不知道它是否适用于 .bind/${name} 案例以及示例中的 oneTime 案例,但也许如果引起他的注意,他可以说任何一种方式。

    鉴于这不是一个简单明了的答案,我会将 Ashley 的答案标记为答案,因为它确认了易读性问题,并在其他人搜索类似术语时提供了有关其他用例的有用信息。

    【讨论】:

    • 我会在这里听从杰里米的意见。他绝对是专家。
    猜你喜欢
    • 2015-04-05
    • 2013-04-01
    • 1970-01-01
    • 2015-11-27
    • 2020-12-01
    • 2022-07-05
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多