Собственная привязка шаблона Knockoutjs и простой массив строк

Я пытаюсь понять встроенную knockoutjs привязку к шаблону, особенно привязка foreach.

Просто интересно, как получить доступ к текущему элементу, используя нативную ставку? С jQuery.tmpl можно использовать что-то вроде $item/$data. Как сделать то же самое, используя привязку собственного шаблона, когда источником данных являются массивы примитивов, поэтому каждый элемент не имеет именованных полей? Вот JSFiddle с двумя примерами, первый - с использованием нативной привязки, где источником данных является массив пользовательских объектов. , второй - привязка к массиву строк. Я не могу заставить его работать, похоже, я упускаю что-то очевидное?

В основном я пытаюсь понять собственные привязки и иметь возможность рефакторинга следующего примера с использованием собственной привязки: JSFiddle: список проверенных items, чтобы я мог сохранить наблюдаемую переменную, которая представляет собой список проверенных элементов, разделенных запятыми.


person sll    schedule 27.02.2012    source источник


Ответы (2)


Вы можете использовать $data для доступа к необработанному значению, например: http://jsfiddle.net/rniemeyer/M73S8/3/. .

Вот другая обновленная скрипка: http://jsfiddle.net/rniemeyer/EGAH9/8/. Не уверен, какую именно функциональность вы хотите в нем поддерживать.

person RP Niemeyer    schedule 27.02.2012
comment
Вау, $data тоже поддерживается, похоже, я что-то перепутал в своем исходном скрипте, так что пробовал и $data/$item, в любом случае, спасибо, теперь я на 100% уверен, что мне использовать. Что касается второго примера, не могли бы вы посмотреть этот пример, при проверке флажков значение переменной selectedPeople отражает список выбранных товаров, возможно ли иметь такой шаблон, используя нативный торг? Спасибо - person sll; 28.02.2012
comment
Вы хотите, чтобы у selectedPeople были свои имена или что-то еще? - person RP Niemeyer; 28.02.2012
comment
Правильно, это могут быть имена флажков или значение любого другого свойства флажка, такого как ID, но основная идея состоит в том, чтобы сохранить список выбранных элементов. - person sll; 28.02.2012
comment
Привязка checked зависит от значения элемента option, поэтому вы можете хранить идентификатор, имя или что угодно. Если вы хотите хранить объекты, вам нужно будет сохранить ключ (id), а затем использовать вычисляемую наблюдаемую для представления массива объектов. Вот пример: jsfiddle.net/rniemeyer/EGAH9/11 - person RP Niemeyer; 28.02.2012
comment
Я прав, что с нативной привязкой я не могу использовать шаблонные ставки и $root? Другими словами, возможно ли сделать то же самое, но с шаблоном <li>? - person sll; 28.02.2012
comment
Собственный механизм шаблонов может работать с шаблонами, содержащимися в других элементах (обычно тегах скрипта), поэтому примерно так: jsfiddle.net/rniemeyer/EGAH9/12 работает. - person RP Niemeyer; 28.02.2012
comment
Вы можете сделать это без вычисляемой наблюдаемой, просто используя событие щелчка и сохраняя его в самом массиве. jsfiddle.net/cjgaudin/Dp7Br - person Corey Gaudin; 28.02.2012
comment
@CoreyGaudin: спасибо, это тоже работает. Я считаю, что решение с использованием computed выглядит более интересным, поскольку это нокаут-нативный подход. - person sll; 28.02.2012

Я не уверен, что на этот вопрос уже ответил удивительный Нимейер (спасибо за всю вашу помощь в сообществе Knockout!), но я сделал jsFiddle, чтобы показать сохранение фактических объектов Person Selected в наблюдаемом массиве.

Я не уверен, что это то, что вы пытаетесь сделать, но, возможно, кто-то еще исследует это, глядя на то, как сделать именно это: связать фактические объекты в наблюдаемый массив, а не только идентификаторы (хотя я тоже добавил это чтобы напомнить мне).

Пример привязки выбранных объектов списка флажков: http://jsfiddle.net/cjgaudin/Dp7Br/

person Corey Gaudin    schedule 28.02.2012
comment
RNiemeyer уже опубликовал решение здесь. В любом случае интересно посмотреть разные решения, так как я только начал изучать Knockoutjs, спасибо и +1 в качестве кредита - person sll; 28.02.2012
comment
Что ж, одна приятная вещь в этом заключается в том, сколько разных способов Knockout позволяет вам решать эти проблемы. Хорошая структура позволяет решать сложные проблемы множеством способов. Вот почему я люблю Нокаут. Кроме того, RP Niemeyer - человек, когда дело доходит до нокаута. Он знает свое дело. - person Corey Gaudin; 01.03.2012