2012-05-28 3 views
0

Давайте предположим, что у меня есть простой HTML-разметка:Как поднять DOM событие при работе с KnockoutJS

<div> 
    <input type="text"/> 
</div> 

, когда я нажимаю на DIV я хотел бы сосредоточиться входом. Какие у меня способы сделать это?

Я думал о нескольких возможностях, но не выглядел хорошо:

  • просто забыть о нокауте и использовать старый добрый JQuery. Но тогда код превращается в спагетти, а поведение UI распространяется по многим местам.
  • создать пользовательский bindHandler для ввода и добавить привязку привязки к div, щелкнув изменения свойства модели, пользовательское связывание реагирует на него и вызывает событие фокуса. Но это слишком сложно для такой легкой вещи (по крайней мере, в jq было легко).

Есть ли другие варианты?

+0

По моему скромному мнению, спагетти-код является результатом плохой практики программирования, а не из-за выбора библиотеки. Вы можете написать Spaghetti-Code в нокауте, jquery или просто JS, если кто-то не знает, что они делают. С другой стороны, вы также можете написать хороший управляемый код или Ravioli-Code с одним из них. Это больше зависит от разработчика, а не от выбранной вами библиотеки. – Nope

ответ

1

Нокаут отлично подходит для создания пользовательского интерфейса с поддержкой модели данных. Это не помогает, когда вам нужно выполнять низкоуровневые манипуляции с DOM (как вы описываете). Фактически, на introduction page для нокаута автор сообщает:

Все любят jQuery! Это выдающаяся замена неуклюжего, несовместимого DOM API, с которым нам пришлось мириться в прошлом. jQuery - это отличный низкоуровневый способ манипулирования элементами и обработчиками событий на веб-странице . Я, безусловно, все еще использую jQuery для манипуляций с DOM низкого уровня. KO решает другую проблему.

(курсив мой)

Лично я думаю, что это прекрасно, чтобы использовать JQuery для этого типа манипуляции. Если вы нарушаете обработчики событий и код MVVM в отдельные файлы JavaScript, вы можете избежать написания кода спагетти.

+0

Может быть, вы правы, я думал, что, возможно, есть третий способ «нокаута» для выполнения DOM-манипуляций низкого уровня, и я просто этого не видел. Кажется, что нет, и мне лучше пойти с jQuery –

+0

@AndrejSlivko: Я работал над несколькими проектами с нокаутом и jQuery и до тех пор, пока вы спрашиваете себя, является ли взаимодействие более чистым манипулятором DOM или должно управляться ViewModel , вам будет хорошо. –