2016-12-07 5 views
1

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

<div repeat.for="i of model.someArray.length"> 
    <label>Some Array - Index ${i + 1}</label> 
    <input value.bind="model.someArray[i]" some-custom-attribute="someArray[${i}]"/> 
</div> 

и что some-custom-attribute не выводится в повторе, но если бы я, чтобы удалить строку интерполяции внутри там, то он выводит нормально.

== Edit ==

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

<input value.bind="model.someArray[i]" some-custom-attribute="someArray[0]"/>

some-custom-attribute не является атрибутом aurelia, его чистым HTML, который использует сторонняя JS-библиотека, поэтому целью здесь является получение текстового значения индекса в значение текстового атрибута.

ответ

2

model.someArray.length - это номер, а не массив. Вам нужно перебирать массив. Если вам нужен текущий индекс, ретранслятор предоставляет вам $index.

Ваш код должен выглядеть следующим образом:

<div repeat.for="item of model.someArray"> 
    <label>Some Array - Index ${$index + 1}</label> 
    <input value.bind="item" some-custom-attribute.bind="item"/> 
</div> 

Чтобы ответить на ваш первоначальный вопрос, делать some-custom-attribute="model.someArray[${i}]" делает Aurelia думает, что вы пытаетесь передать значение строки для пользовательского атрибута. Вы можете видеть это в следующем виде: https://gist.run/?id=eed8ac8623ff4749aa5bb93c82a7b1fb Я создал пользовательский элемент, который просто подталкивает любое значение, которое он задает, к элементу на странице. Примечание !!! Никогда не делай то, что я здесь делаю! Я просто сделал это таким образом, чтобы вам не пришлось открывать консоль js. Чтобы действительно получить значение, вам нужно будет использовать some-custom-attribute.bind="item" или (чтобы делать то, что вы делаете, some-custom-attribute.bind="someArray[i]"

+0

Несмотря на то, что это не мой вопрос, я узнал о свойстве '$ index'. отличный ответ! – LStarky

+0

Да, я действительно узнал, что итерация по ряду работает. Я не знал этого. Как я уже сказал, способ, которым я показал, - это то, как вы должны это сделать. Я посмотрю, почему пользовательский атрибут не работает, t work, так как в основном вы передаете ему строку в свой код. –

+0

Просто, чтобы подтвердить, что это не настраиваемый атрибут aurelia, его просто атрибут html, который использует сторонняя JS-библиотека, я просто хочу передать ему значение 'someArray [0]' с заменой 0 на текущий индекс, я не хочу передавать в фактический элемент там, если $ index можно использовать вместо 'i', я могу использовать это, но я в основном не желая, чтобы aurelia делала что-либо здесь, кроме значения 'some-custom-attribute', являющегося текстом' someArray [0] '. Также повторение действительно работает для других частей, как и ожидалось, поэтому оно повторяется 'n' раз, но я согласен, что это будет выглядеть лучше, чем стиль стиля foreach. – Grofit