2017-02-14 9 views
3

В нашей базе кода мы имеем смесь из следующих действий:.bind против интерполяции строк в Aurelia

  1. атрибута = "$ {} что-то", атрибут = "$ {что-то | преобразователя}" и т.д.
  2. attribute.bind = "что-то", attribute.bind = "что-то | преобразователь"

Я нахожу последний легче читать.

Примеры, которые я имею в виду, в точности подобны приведенным выше; то есть они не добавляют никакого дополнительного содержимого строки.

Я думаю, что на Аурелии тоже легче. Я прав?

Кроме того, для этих конкретных случаев, когда фактическая интерполяция не имеет значения , есть ли какие-либо выгоды для первой формы? (кроме двух знаков меньше, чтобы напечатать.)

ответ

3

Учитывая примеры, которые вы показали, я бы рекомендовал использовать вариант 2. Это действительно не «проще на Aurelia», но более очевидно, что вы привязывая значение этого атрибута к указанному свойству.

Оригинал ответа Ниже

в пользу первого варианта, когда у вас есть, например, атрибут, который принимает много значений, но в виде одной строки. Наиболее распространенным примером этого является атрибут class. Атрибут class принимает несколько классов в разделенных пробелами список:

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

Представьте, что мы только хотим, чтобы добавить или удалить класс baz из этого списка на основе опоры на нашей виртуальной someProp, оставляя другие классы. Чтобы сделать это, используя синтаксис .bind, нам нужно было бы создать свойство на нашей виртуальной машине, которое имеет полный список, но добавляет или удаляет 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 : ''}`; 
    } 
} 

Лучшая часть является то, что я до сих пор используют интерполяцию строки в преобразователе значение :-)

+0

«Примеры, которые я имею в виду, похожи на приведенные выше, они не добавляют никакого дополнительного содержимого строки». :) Таким образом, рассматриваемые случаи всегда имеют вид = "$ {...}", это не такие вещи, как class = "class1 $ {...}", которые, я согласен, будут полезны случай для интерполяции. – Dave

+0

Да, но вы спросили, есть ли какая-либо польза для формы интерполяции строк, поэтому я привел пример того, где ее проще использовать. –

+0

Мне показалось, что я ясно сказал в вопросе, что я специально спрашивал о случаях, когда строки фактически не были интерполированы. Я перефразирую его, чтобы сделать его более очевидным. Приветствия. – Dave

0

После пробираясь через вкладки, которые я уже открыл, я нашел это.Несмотря на то, что это не совсем то же самое, и это немного старый, есть нечто подобное говорили о https://github.com/aurelia/templating-binding/issues/24#issuecomment-168112829 г Danyow (курсив мой)

Дa, символ для связывания поведения является & (в отличие от | для преобразователи ценности).

<input type="text" data-original="${name & oneTime}" value.bind="name" />

Вот стандартный способ написать разово связывания. Это будет немного более легкий с точки зрения синтаксического анализа и связывания:

<input type="text" data-original.one-time="name" value.bind="name" />

Я не знаю, если это относится к .bind/$ {имя} дела, а также одно время в примере, но, возможно, если обратиться к нему, он может сказать в любом случае.

Учитывая, что это не отрезанный и сухой ответ, я буду отмечать Эшли как ответ, поскольку он подтверждает вопрос о разборчивости и предоставляет полезную информацию о других случаях использования, если кто-либо еще будет искать похожие термины.

+0

Я отложу здесь Джереми. Он определенно эксперт. –