KnockoutJS дублирует служебные данные

В последние несколько дней я все больше интересуюсь Knockoutjs. Это выглядит очень многообещающе, потому что моделирует шаблон MVVM и привязки WPF, но у меня есть некоторые сомнения, когда это приносит что-то полезное для веб-приложений без RIA (и когда я говорю RIA, я имею в виду сложные браузерные приложения, скажем, ERP, во всяком случае что-то немного более сложное, чем добавить несколько строк в таблицу и скрыть одну)

Допустим, у вас есть выпадающий список с 10 элементами, и вам нужно создать на стороне клиента еще 2 элемента и сохранить их на сервере.

Насколько я понимаю, вам нужно будет создать модель представления с помощью Obs. массив, предварительно заполненный 10 элементами, а также визуализировать 10 элементов внутри поля со списком (как 10 элементов выбора).

По сути, у вас будет 2 цикла, удваивающих коллекцию элементов, и визуализируйте элементы в модели просмотра js и поле со списком (параметры).

Теперь представьте, что у вас было бы 30 элементов управления, не было бы накладных расходов при наличии информации как о модели представления нокаута, так и о элементах управления html с предварительно заполненными данными?


person Narcis    schedule 04.07.2012    source источник
comment
Если мой ответ был полезен, пожалуйста, примите его .... любые другие вопросы о нокауте, которые я буду рад помочь.   -  person Tom W Hall    schedule 08.07.2012


Ответы (1)


Каждая ситуация отличается, но я не думаю, что вам обычно нужно отображать эти параметры со списком, а также определять их в модели представления Knockout - Knockout создаст параметры HTML для вас. У меня есть множество полей со списком, заполненных таким образом в сложном графе объектов. Когда страница загружается в первый раз, начальное состояние графа объектов отображается на странице как литерал объекта, который я затем передаю в конструктор модели представления Knockout верхнего уровня, который создает всю структуру с помощью подключаемого модуля сопоставления (создание дочерних моделей представления и т. д.). ). Затем все сохранение и обновление выполняется с помощью небольших дискретных операций Ajax и переназначения с помощью подключаемого модуля сопоставления.

person Tom W Hall    schedule 04.07.2012
comment
На сайте Knockout (который является одним из самых красивых, лучше всего документированных и представленных библиотечных сайтов, с которыми я сталкивался — почему они не могут быть такими?) есть хорошая демонстрация различных привязок элементов управления HTML: knockoutjs.com/examples/controlTypes.html - person Tom W Hall; 04.07.2012
comment
В моем контексте генерация HTML на стороне клиента Knockout значительно сократила мои накладные расходы, позволив мне повторно использовать одни и те же метаданные в нескольких моделях представления — например, я извлекаю свои справочные данные поиска в виде JSON один раз в отдельный файл, который кэшируется, и используется Knockout в качестве вариантов выбора, возможно, из 10 вариантов. Затем каждая модель представления просто сохраняет идентификатор выбранного элемента. Если бы страница отображалась с каждым выбором, предварительно заполненным одними и теми же элементами, она быстро стала бы тяжелой. - person Tom W Hall; 04.07.2012
comment
Одна проблема, которую я вижу при заполнении только модели представления, заключается в том, что поле со списком получит свои параметры только после полной загрузки страницы, я могу выбрать что-то, как только браузер отобразит элемент управления выбора. - person Narcis; 04.07.2012
comment
Это тоже возможно: допустим, у вас есть список профессий в виде массива объектов, каждый из которых имеет идентификатор и отображаемое имя. Тогда ваша привязка будет выглядеть примерно так: ‹select data-bind=options: lookupData.Occupations, optionsValue: 'ID', optionsText: 'DisplayName', value: OccupationID›‹/select›, где OccupationID — текущее выбранное значение в представлении модель (например, клиент), у которой есть род занятий. Вы также можете определить пустую опцию и т. д. - person Tom W Hall; 05.07.2012