Используя Durandal, как вы можете использовать несколько файлов моделей представления в одном представлении, чтобы разбить большой файл?
У меня есть приложение, которое использует Google Map в одном из своих просмотров. Это SPA, который использует файловую структуру view / viewmodel Durandal, используя соглашение. Проблема, которую я пытаюсь решить, состоит в том, что функциональные режимы, которые разделяют вид карты (карта Google), весьма разнообразны. В качестве примеров приложение должно показывать текущее местоположение транспортных средств на карте, иметь возможность отображать историческую информацию (пути) для транспортных средств и разрешать создание, редактирование и удаление геозон. Каждый режим использования карты требует, чтобы некоторые элементы управления UX были скрыты, а другие - видимыми.
Я полагаю, что, когда весь вышеприведенный логический код Viewmodel будет создан для этого, модель Viewmodel станет достаточно большой и, следовательно, ее будет сложно поддерживать и кодировать. Я пытаюсь избежать огромного файла viewmodel с логикой для всех этих элементов управления UX.
Концептуально я хотел бы, чтобы несколько файлов моделей представления работали без проблем с одним файлом представления, поэтому мне не нужно повторять карту Google в нескольких представлениях. Кроме того, я хотел бы поддерживать легкую / автоматическую привязку с помощью Knockout, если это возможно. Какие решения используют Durandal для разбиения большого файла модели представления при сохранении одного файла представления? Это возможно или даже желательно?
1 ответ
Я бы прочитал на http://requirejs.org/. Durandal использует requirejs как способ структурирования ваших файлов JavaScript. Requirejs следует схеме AMD, которая делает для вас немало вещей. Позволяет создавать частные переменные с помощью инкапсуляции и предотвращает загрязнение глобального пространства имен.
В AMD также есть шаблоны, которые могут иметь синглтоны или модули amd, которые возвращают функции, используемые для создания объектов. Очень похоже на то, как Class'используются в ОО-языках. Наследование Javascript довольно прикольное, хотя... так что может потребоваться некоторое чтение... чтобы увидеть различные способы наследования.
Итак, как только все ваши js-файлы разбиты на миллион маленьких модулей, вы будете похожи на ermergawd... мой код для спагетти теперь является кодом макарон!
Но не бойтесь... ваш macaronni-код может быть сжат / уменьшен / уменьшен с помощью requirejs' r.js. r.js может сжать все ваши html / css / js в 1 файл... который может быть вашим целым приложением / сайтом. Durandal также предоставляет потрясающий оптимизатор, который сделает все это за вас автоматически.