Created
March 19, 2012 11:21
-
-
Save sergeche/2108104 to your computer and use it in GitHub Desktop.
Пример контроллера шагов
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var StepModel = Backbone.Model.extend({ | |
// шаблон для шага по умолчанию | |
template: 'steps/defaultTemplate', | |
initialize: function(data) { | |
// инициализруешь модель | |
// ... | |
// инициализация вьюхи | |
this.view = templates.render(data.template || this.template); | |
}, | |
validate: function() { | |
// асинхронная валидация данных | |
}, | |
/** | |
* Показывает текущий шаг | |
*/ | |
show: function() { | |
// сама функция ничего не делает, а делегирует это коллекции | |
this.trigger('shouldShow'); | |
}, | |
/** | |
* Прячет текущий шаг | |
*/ | |
hide: function() { | |
// сама функция ничего не делает, а делегирует это коллекции | |
this.trigger('shouldHide'); | |
} | |
}); | |
var StepsCollection = Backbone.Collection.extend({ | |
model: StepModel, // отдельно делаешь модель шага | |
initialize: function() { | |
var that = this; | |
this | |
.on('shouldShow', function(step) { | |
that.showStep(step); | |
}) | |
.on('shouldHide', function(step) { | |
that.showHide(step); | |
}); | |
}, | |
/** | |
* Добавляем новый шаг (или массив шагов) в коллекцию. Перекрываем | |
* существующий метод | |
*/ | |
add: function (models, options) { | |
models = _.isArray(models) ? models.slice() : [models]; | |
var modelClass = this.model; | |
// инициалищируем каждую модель делегата | |
var completeModels = []; | |
_.each(models, function(data, i) { | |
// тут инициализируешь шаг, как сейчас делаешь: | |
// смотришь, если ли предопределённый шаг, инициализируешь модель и т.д. | |
// если фабрика шага не вернула null, значит, добавляешь его в completeModels | |
}); | |
// вызываешь основной метод, который добавляет готовые модели в коллекцию | |
this.__super__.add.call(this, completeModels, options); | |
}, | |
showStep: function(step) { | |
// описываешь логику, согласно которой нужно показать указанный шаг | |
}, | |
hideStep: function(step) { | |
// описываешь логику скрытия шага | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment