-define([
-'libs/text!./saveDialog.html',
-'libs/underscore',
-'libs/backbone',
-'libs/jquery'
-], function(saveDialogTemplate, _, Backbone, $) {
+define(function(require) {
+
+ 'use strict';
+
+ var _ = require('libs/underscore'),
+ Backbone = require('libs/backbone'),
+ saveDialogTemplate = require('libs/text!./saveDialog.html'),
+ fieldTemplates = {};
+ fieldTemplates.checkbox = require('libs/text!./templates/checkbox.html');
+ fieldTemplates.select = require('libs/text!./templates/select.html');
+ fieldTemplates.textarea = require('libs/text!./templates/textarea.html');
+ fieldTemplates.input = require('libs/text!./templates/input.html');
+
+
var DialogView = Backbone.View.extend({
template: _.template(saveDialogTemplate),
_.bindAll(this);
this.actionsDisabled = false;
},
- show: function() {
+ show: function() {
this.setElement(this.template());
+
+ var body = this.$('.modal-body');
+ this.options.fields.forEach(function(field) {
+ var template = fieldTemplates[field.type];
+ if(!template) {
+ throw new Error('Field type {type} not recognized.'.replace('{type}', field.type));
+ }
+ body.append(
+ _.template(template)(_.extend({description: ''}, field))
+ );
+ });
+
this.$el.modal({backdrop: 'static'});
this.$el.modal('show');
this.$('textarea').focus();
-
},
onSave: function(e) {
e.preventDefault();
- var view = this;
+ var view = this,
+ formData = {};
+
+ this.options.fields.forEach(function(field) {
+ var widget = view.$('[name=' + field.name +']');
+ formData[field.name] = widget.val();
+ });
+
this.trigger('save', {
- data: {description: view.$el.find('textarea').val()},
+ formData: formData,
success: function() { view.actionsDisabled = false; view.close(); },
error: function() { view.actionsDisabled = false; view.close(); },
});
},
close: function(e) {
- if(e)
+ if(e) {
e.preventDefault();
+ }
if(!this.actionsDisabled) {
this.$el.modal('hide');
this.$el.remove();
});
return {
- create: function() {
- return new DialogView();
+ create: function(config) {
+ return new DialogView(config);
}
};