Поскольку я не нашел подходящего MVC-решения для мобильного проекта Titanium, я предложил следующий подход. Для небольших приложений это может быть слишком сложно, но может помочь в поддержке растущих приложений.
Структура папок:
/Resources
/model
/view
/controller
/ui
/iphone
/android
app.js
app.jss
Для разделения видов, моделей и контроллеров необходимо пространство имен, поэтому мы определяем его в app.js, который является нашим основным контроллером:
var app = {
view: {},
controller: {},
model: {},
ui: {}
}
В папках мы размещаем отдельные файлы JavaScript для каждого компонента. Для этого мы могли бы использовать легковесную библиотеку JavaScript OOP, такую как MooTools или Prototype, или определить простые функции JS в качестве наших объектов. Если вы также хотите наследовать от родительских классов, библиотека определенно имеет смысл.
Примеры:
# Resources/controller/MyController.js
app.controller.MyController = function() {
return {
getView: function() {
return new app.view.MyView().getView();
}
}
}
# Resources/view/MyView.js
app.view.MyView = function() {
return {
getView: function() {
return Ti.UI.createWindow({...});
}
}
}
# Resources/view/MyModel.js
app.model.MyModel = function() {
return {
some: "data",
foo: "bar"
}
}
После этого мы можем включить все необходимые классы модели / вида / контроллера с помощью Ti.include () в файл app.js и ссылаться на компоненты в нашем пространстве имен:
Ti.include("controller/MyController.js");
Ti.include("view/MyView.js");
var myController = new app.controller.MyController();
var myView = myController.getView();
myView.open();
Подход MVC теперь предполагает, что контроллер «контролирует» состояние представления и передает данные из модели в представление. Представление состоит только из элементов пользовательского интерфейса и свойств для стиля. Любое действие, выполненное в пользовательском интерфейсе, вызывает событие, которое сообщает контроллеру о необходимости выполнения желаемого действия.
Но, конечно, точное определение MVC может отличаться в зависимости от вашего личного вкуса;)