Как вы структурируете свои приложения Backbone + RequireJS?

Я изо всех сил пытался добиться правильного баланса между возможностью повторного использования и сложностью, когда дело доходило до организации объектов Backbone в AMD (для приложений среднего и крупного масштаба)

(A) Должен ли каждый объект Backbone (модели, представления и т.д.) находиться в своем собственном модуле? (B) Должны ли связанные объекты Backbone находиться в одном модуле AMD? (то есть: PersonModel, PersonCollection, объекты PersonView в том же определении модуля)

Опция (A), по-видимому, обеспечивает максимальную гибкость и возможность повторного использования, но также и самую сложность из-за (потенциально) большого количества файлов. Хотя вариант (B) может упростить управление вещами, но менее гибким и действительно трудным для unit test.

Как (или есть) все остальные структурировали эти вещи?

Ответы

Ответ 1

Хорошая вещь о requirejs заключается в том, что она позволяет абстрагировать физические файлы в структурированные пространства имен. Вы можете принять подход (A) и создать каждый базовый класс в своем собственном файле, а затем создать модуль "пространства имен", чтобы склеить все связанные классы вместе.

// Suppose you have PersonView.js, PersonCollectionjs, PersonModel.js as modules
// create a Person module to function as namespace
define(["PersonModel", "PersonCollection", "PersonView"], function(model, collection, view) {
     return {
        Model: model,
        Collection: collection,
        View: view
     };  
});

Это блокирует модули в своих файлах и дает вам некоторую гибкость для записи одного модуля на класс, не требуя, чтобы вы открыли эту организацию для остальной части приложения (мне действительно не нравится писать require("PersonView", "PersonModel" ... ) каждый раз, когда мне нужно использовать объекты человека, проще и чище для потребителей объявлять зависимость от "пространства имен" вместо независимых классов).

Ответ 2

Для средних и крупных магистральных проектов я предпочитаю использовать requirejs с отдельным модулем для каждой модели, коллекции и представления. Я также использую плагин "Текст" для requirejs, поэтому я могу загружать шаблоны подчеркивания так же, как и любой другой модуль. Это для меня, кажется, самый надежный способ управлять крупным проектом, и я никогда не чувствовал себя переполненным количеством файлов, которые у меня есть.

+1 при использовании оптимизатора requirejs при нажатии вашего приложения на производство. Работает очень хорошо. http://requirejs.org/docs/optimization.html

Ответ 3

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

Он предоставляет единые команды для запуска: веб-сервер dev, одиночный тестовый бегун jasmine single browser, jasmine js-test-driver multi browser test runner и конкатенизацию/минимизацию для JavaScript и CSS. Он также выводит неограниченную версию вашего приложения для производственной отладки, предварительно скомпилирует ваши шаблоны руля и поддерживает интернационализацию.

Настройка не требуется. Он просто работает.

http://github.com/davidjnelson...