В настоящее время я работаю над большим веб-приложением, построенным на backbone.js, и у меня было много проблем с организацией, «зомби» и т. Д., Поэтому я решил сделать крупный рефакторинг кода. Я уже написал кучу вспомогательных функций для борьбы с «зомби»; однако я бы хотел начать с самого начала и создать красивую структуру / организацию кода. Я не нашел много хороших руководств / примеров по крупномасштабной организации backbone.js, поэтому я начал как бы с нуля и хотел бы узнать, смогу ли я получить некоторые мнения о том, с чего я начал.
Я, очевидно, установил свой код в глобальном пространстве имен; но я также хотел бы, чтобы это пространство имен было довольно чистым. В моем основном app.js файлы классов хранятся отдельно от глобального пространства имен; вы можете зарегистрировать класс (чтобы его можно было создать) с помощью функции reg (), а функция inst () создает экземпляр класса из массива классов.Таким образом, помимо трех методов, в пространстве имен MyApp есть только маршрутизатор, модель и представление:
var MyApp = (function () {
var classes = {
Routers: {},
Collections: {},
Models: {},
Views: {}
};
methods = {
init: function () {
MyApp.Router = MyApp.inst('Routers', 'App');
MyApp.Model = MyApp.inst('Models', 'App');
MyApp.View = MyApp.inst('Views', 'App');
Backbone.history.start();
},
reg: function (type, name, C) {
classes[type][name] = C;
},
inst: function (type, C, attrs) {
return new classes[type][C](attrs || {});
}
};
return methods;
}());
$(MyApp.init);
В рамках моделей, коллекций, маршрутизаторов и представлений я работаю как обычно, но затем мне нужно зарегистрировать этот класс в конце файла, чтобы он может быть создан позже (без загромождения пространства имен) с помощью:
MyApp.reg('Models', 'App', Model);
Не кажется ли это ненужным способом организации кода? Есть ли у других лучшие примеры того, как организовать действительно большие проекты с множеством маршрутизаторов, коллекций, моделей и представлений?