2015-02-03 3 views
0

Я хотел бы связать attr и attr1 в следующем примере. Эти два параметра не зависят от data (другие атрибуты). При использовании привязки этот путь между всеми «строками» существует только один общий объект данных. Я хочу, чтобы только два компонента одной итерации были связаны вместе.Параметры связывания двух полимерных компонентов внутри шаблона повторения

<template repeat"{{data in dataList}}"> 
    <component1 attr="{{binding}}" /> 
    <component2 attr2="{{binding}}" /> 
</template> 

Моя первая идея состояла в том, чтобы связать атрибуты с переменной data объекта:

<template repeat"{{data in dataList}}"> 
    <component1 attr="{{data.binding}}" /> 
    <component2 attr2="{{data.binding}}" /> 
</template> 

Это решение, с другой стороны, это действительно некрасиво, потому что придает вид только данные объектной модели ПОЛУЧИТЬ в , Поскольку модель живет обычно дольше, чем компоненты, это может привести к огромным накладным расходам. Другой проблемой является сериализация, которая может завершиться неудачей из-за прикрепленных данных.

Есть ли элегантное решение? Единственное, что я представлял себе до сих пор, это обернуть объекты данных перед итерацией по набору данных. Этот подход, с другой стороны, вероятно, создаст проблемы с обновлением модели ...

Наивная мысль: не может быть область переменной, которая используется только внутри шаблона, ограниченного этим шаблоном? В частном случае шаблона повторения, кроме того, к одной итерации?

ответ

0

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

<polymer-element name="my-element" attributes="dataList"> 
    <template> 
    <ul> 
     <template repeat="{{d in dataList}}"> 
     <li> 
      {{d}} ⇒ {{binding[d]}} <!-- Since type-suggested, it works --> 
     </li> 
     </template> 
    </ul> 
    </template> 

    <script> 
    Polymer({ 
     dataList: ['navy', 'maroon'], 
     binding: {} /* it’s necessary to type-suggest var for Polymer */ 
    }); 
    </script> 
</polymer-element> 

Пожалуйста, обратите внимание, что фрагмент кода выше ожидает различные элементы в dataList. Предварительный просмотр в прямом эфире: http://plnkr.co/edit/ez36BVUPCKW8xRSkGxOM?p=preview

Наивная мысль: не может быть областью действия переменной, которая используется только внутри шаблона, ограниченного этим шаблоном? В частном случае шаблона повторения, кроме того, к одной итерации?

Это кажется невозможным для меня, потому что (кроме того, что это будет усложнять реализацию) иногда хочется, чтобы связать переменную в вложенной шаблона:

<template repeat="{{a in lst}}"> 
    {{bound_here}} 
    <template id="nested"> 
    {{bound_here}} 
    ... 

С чем вы предположили, что связывание выше становится невозможно.

+0

Спасибо за отличное решение. Я немного изменил код, чтобы быть независимым от фактических данных: создал 'bindings' массив и использовал переменную' index' в шаблоне повтора. http://plnkr.co/edit/eK0aLn4Tk29MxnkE7GZz?p=preview – simonseyer

+0

Я рад, что вы нашли это решение полезным. Конечно, использование «индекса» обычно лучше; Я просто показываю рисунок. – mudasobwa

+0

Работает ли этот синтаксис в Polymer 1.0? У меня есть аналогичный вопрос, что я спотыкаюсь через http://stackoverflow.com/questions/35001873/polymer-index-property-of-type-object-with-another-property – MandM

Смежные вопросы