4.4 Expanding Controllers - mmig/mmir GitHub Wiki
Expanding Controllers
Expand an existing controller
Expanding an existing controller means to add some new methods (actions) to its JS code. For example you can add a remove_user method to the application controller to remove an existing user from your database as follows:
Application.prototype.remove_user = function(data){
  var user_name = data.user_name;
  //write your code here
}
data is a well-formatted JSON object which contains the information (parameters) that you would like to send to this method (in this case the user_name). To call this method from other controllers or scripts in your application you first need to define the data object and then call the method through ControllerManager as below:
var data = $.parseJSON('{"user_name":"MAX"}');
mmir.ctrl.perform(
  'Application','remove_user', data
);
Add new controllers
Let us make a Calendar controller with an action of create appointment, which will create a new appointment for the user. To do this:
- 
In Eclipse, navigate to www/controllers.
- 
In controllersfolder create a new file and name itcalendar.js.
- 
Copy the following code into calendar.js//application namespace var mmir = window.mmir || {}; //controller's constructor var Calendar = function(){ this.name = "Calendar"; } //This method will be called before rendering the views of this controller. Calendar.prototype.on_page_load = function(){ }This is the basic skeleton of each controller. You can use this code each time you would add a new controller to your application. You just have to replace Calendar with the name of your controller. 
- 
Add the following method to the calendar controller: Calendar.prototype.create_appointment = function (ctrl, data){ var container_id = data.container_id; var container = $("#" + container_id); var subject = $("#subject", container).val(); var enteredDate = $("#app-date", container).datebox('getTheDate'); var year = enteredDate.getFullYear(); var month = enteredDate.getMonth() + 1; var day = enteredDate.getDate(); var startTime = $("#start-time", container).datebox('getTheDate'); var start_h = startTime.getHours(); var start_m = startTime.getMinutes(); var endTime = $("#end-time", container).datebox('getTheDate'); var end_h = endTime.getHours(); var end_m = endTime.getMinutes(); var note = $("#note", container).val(); if(typeof note !== 'string'){ note = ''; } else { note = note.escapeDoubleQuotes() .replaceAll('\r\n','\\r\\n').replaceAll('\n','\\n'); } var eventData = '{"subject":"' + subject + '","year":"' + year + '","month":"' + month+'","day":"' + day + '","start_hours":"' + start_h + '","start_minutes":"' + start_m + '","end_hours":"' + end_h+'","end_minutes":"' + end_m + '","note":"' + note + '"}'; var jData = jQuery.parseJSON(eventData); var cb_func = function(){ alert("STUB: appointment successfully created!\n\n" +JSON.stringify(jData, null, 2) ); }; mmir.model.get('CalendarModel') .getInstance().save_appointment(jData, cb_func); };
< previous: "Building-MMIR-StarterKit" | next: "Expanding Views" >