You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.7 KiB
JavaScript
81 lines
1.7 KiB
JavaScript
define([
|
|
'jquery',
|
|
'underscore',
|
|
'backbone',
|
|
'marionette',
|
|
'core/listener',
|
|
'core/router',
|
|
'widgets/slide/view',
|
|
'widgets/slide/model'
|
|
], function AppDefine(
|
|
$,
|
|
_,
|
|
Backbone,
|
|
Marionette,
|
|
Listener,
|
|
Router,
|
|
SlideView,
|
|
SlideModel
|
|
) {
|
|
'use strict';
|
|
|
|
var Application = Marionette.Application;
|
|
var SlideCollection = Backbone.Collection.extend({
|
|
url: '/slides'
|
|
});
|
|
|
|
function App(options) {
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
Application.apply(this, arguments);
|
|
}
|
|
|
|
App.prototype = new Application();
|
|
|
|
_.extend(App.prototype, {
|
|
initialize: function initialize(options) {
|
|
options = options || {};
|
|
|
|
this.collection = new SlideCollection();
|
|
|
|
this.module('listener', Listener);
|
|
|
|
this.model = new SlideModel();
|
|
this.view = new SlideView({el: options.el, model: this.model});
|
|
|
|
this.router = new Router();
|
|
this.listenTo(this.router.model, 'change:slide', function (model, num) {
|
|
this.triggerMethod('slide:change', num);
|
|
}, this);
|
|
},
|
|
|
|
goToSlide: function goToSlide(nextId) {
|
|
if (this.collection.get(nextId)) {
|
|
this.router.navigate('slide/' + nextId, {trigger: true});
|
|
}
|
|
},
|
|
|
|
nextSlide: function nextSlide() {
|
|
this.goToSlide(this.model.get('id') + 1);
|
|
},
|
|
|
|
prevSlide: function prevSlide() {
|
|
this.goToSlide(this.model.get('id') - 1);
|
|
},
|
|
|
|
onStart: function onStart() {
|
|
this.view.render();
|
|
this.collection.fetch();
|
|
},
|
|
|
|
onSlideChange: function onSlideChange(num) {
|
|
$('body').removeClass().addClass('page-' + num);
|
|
this.model.set('id', num);
|
|
this.model.fetch();
|
|
}
|
|
});
|
|
|
|
return App;
|
|
});
|