У меня есть этот обычай связывание, который обновляет наблюдаемый с данными для сфокусированного дочернего элемента элемента, который применяется к:TwoWay фокус связывание в knockout.js
ko.bindingHandlers.selected =
init: (element, valueAccessor) ->
receiver = valueAccessor()
$(element).focusin((event) ->
data = ko.dataFor(event.target)
receiver(data)
)
Это работает лучше, чем стандартная hasFocus
обязательный для случая использования, где я хочу какая-то другая часть страницы, чтобы показать информацию о сфокусированном пункте:
<ul data-bind="foreach: items, selected: selectedItem">
<li><a href="#" data-bind="text: name"></a></li>
</ul>
<p data-bind="with: selectedItem">
Selected: <span data-bind="text: name"></span>
</p>
Теперь я хочу, чтобы сделать это двухстороннее связывание а, так что я могу изменить selectedItem
от моего сценария кода и сделать правильный элемент списка, сфокусированный на $.focus()
. Любые идеи о том, как расширить привязку к работе в обоих направлениях?
Я понимаю, что мне может понадобиться подход «привязки к потокам потомков» и не сможет применить привязку к тому же элементу, что и привязка foreach
, но это нормально. Проблема заключается в том, что дочерний элемент не привязан при вызове функции обновления (dataFor
возвращает неопределенный).
Можете ли вы опубликовать скрипку, где вы находитесь, и немного больше информации о том, чего вы пытаетесь достичь? –
Попробуйте следующее: http://jsfiddle.net/ptWxF/2/ Это не очень хорошо работает в обычном браузере, но это для платформы с пространственной навигацией, где акцент важен. – Ropez
Еще одно обновление, с некоторым стилем http://jsfiddle.net/ptWxF/3/ – Ropez