2012-10-14 2 views
7

Мне интересно, как правильно структурировать приложение KnockoutJS.Как правильно структурировать приложение KnockoutJS

  • Официальная документация почти всегда использует только один единственный ViewModel!

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

Будучи не очень опытным с JavaScript Я искал Stackoverflow и нашел those three options. Так что я попробовал первые два варианта, и я не доволен ими:

  • Имея несколько ViewModels как here.

Мне очень сложно решить, какой элемент DOM получает то, что ViewModel. Также было вызвано несколько функций, вызываемых извне DOM-элемента. Возможно, я использовал слишком мало ViewModels с такой архитектурой, но общение между ViewModels показалось мне другим и как-то не должно быть необходимым. Надеюсь. Итак, как это сделать правильно?

  • Имея взгляды суб и использования с обязательным (второй вариант из those three).

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

Я не пробовал метод три, потому что кажется немного перебор, а также использует литералы объектов.

Так есть способ структурирования моего кода, а также полный контроль без использования объектных литералов?

Я надеюсь, что это не было слишком запутанный :-P

ответ

3

Для любого из вариантов, которые вы упомянули, вы не должны использовать литералы объектов. Образцы просто использовали их для упрощения кода. Вы можете создать индивидуальные модели просмотра любым удобным для себя способом.

Например, в # 3 вы можете использовать функцию-конструктор, например: http://jsfiddle.net/rniemeyer/PctJz/149/. Конечно, фактические данные будут передаваться в функцию, а не быть статическими. То же самое с # 2, вы просто должны были бы обернуть его в объект «Вид».

+0

+1 для отображения как объекта литерала, так и функционального способа с тем же примером, облегчает просмотр того, как они отличаются [и понимают, что они не слишком разные :)] – jamiebarrow

+0

отличный пример, спасибо! Мне нужно было обновить скрипку, чтобы увидеть, как она работает - может быть, нокаут устарел? http://jsfiddle.net/memeLab/cy7u9/1/ – ptim

+0

супер полезно, спасибо .. как я могу установить представление по умолчанию при загрузке? http://stackoverflow.com/questions/23946248/ko-js-howto-set-default-view-when-using-view-constructor – ptim

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