Setting up initial backbone models and views.
I'm going to go through this very soon and organize the js files.
--- /dev/null
+jQuery(document).ready(function($){
+ // Backbone.js
+ // Model (Test)
+
+ var EventReg = Backbone.Model.extend({
+ // Default todo attrubute values
+ defaults: {
+ event_name: '',
+ descr: ''
+ }
+ });
+
+ var EventRegList = Backbone.Collection.extend({
+ model: EventReg
+ });
+
+ var EventRegView = Backbone.View.extend({
+
+ tagName: 'div',
+
+ className: 'glm-reg-event-item clearfix',
+
+ eventRegTpl: _.template(
+ '<h2><%= event_name %></h2>' +
+ '<div class="glm-reg-compcode-entry">' +
+ '<input type="text" placeholder="Enter Comp Code Here" />' +
+ '</div>' +
+ '<p><%= descr %></p>'
+ ),
+
+ // Called when the view is first created
+ initialize: function(){
+ this.listenTo(this.model, 'change', this.render);
+ },
+
+ render: function(){
+ this.$el.html( this.eventRegTpl( this.model.toJSON() ) );
+ return this;
+ },
+
+ });
+
+ var EventListView = Backbone.View.extend({
+
+ el: '#eventapp',
+
+ initialize: function(){
+ this.collection.bind('add', this.onModelAdded, this);
+ this.render();
+ },
+
+
+ onModelAdded: function(item) {
+ var eventView = new eventView({model: item});
+ this.$el.append( eventView.render().el);
+ },
+
+ render: function(){
+ var eventView = this.collection.map(function(item){
+ return (new EventRegView({model: item})).render().el;
+ });
+ this.$el.append(eventView);
+ return this;
+ },
+
+ });
+
+ // Use the registration object to build new EventReg
+ var event1 = new EventReg({ 'event_name': registration.event_name, 'descr': registration.descr });
+
+ var eventList = new EventRegList( [ event1 ] );
+
+ var eventRegView = new EventListView({ collection: eventList });
+
+});
// Save plugin configuration object
$this->config = $config;
+ /*
+ * Run constructor for the REgistrations data class
+ *
+ * Note, the third parameter is a flag that indicates to the Contacts
+ * data class that it should flag a group of fields as 'view_only'.
+ */
+ parent::__construct(false, false, true);
}
/**
public function modelAction($actionData = false)
{
- $start = 1;
- $limit = 20;
- $where = 'true';
- $alphaWhere = '';
+ $start = 1;
+ $limit = 20;
+ $where = '';
+ $alphaWhere = '';
+ $alphaList = '';
+ $paging = '';
+ $nextStart = '';
+ $alphaSelected = false;
+ $haveRegEvents = false;
+ $regEventsCount = false;
// Get any provided option
if (isset($_REQUEST['option'])) {
default:
// Get a current list of reg events
- $listResult = $this->getSimpleRegEventsList($where.$alphaWhere, 'event_name', true, 'id', $start, $limit);
+ $listResult = $this->getSimpleRegEventsList($where.$alphaWhere, 'event_name', true, 'id', $start, $limit, true);
echo '<pre>$listResult: ' . print_r( $listResult, true ) . '</pre>';
- break;
+ // Get paging results
+ $numbDisplayed = $listResult['returned'];
+ $lastDisplayed = $listResult['last'];
+ if ($start == 1) {
+ $prevStart = false;
+ } else {
+ $prevStart = $start - $limit;
+ if ($start < 1) {
+ $start = 1;
+ }
+ }
+ if ($listResult['returned'] == $limit) {
+ $nextStart = $start + $limit;
+ }
+
+ // since we're doing paging, we have to break out just the event data
+ $list = $listResult['list'];
+ unset($listResult);
+
+ // If we have list entries - even if it's an empty list
+ $success = true;
+ $haveRegEvents = false;
+ if ($list !== false) {
+
+ $success = true;
+
+ // If we have any entries
+ if (count($list) > 0) {
+ $haveRegEvents = true;
+ }
+ }
+ break;
}
// including test data for now
// Compile template data
$templateData = array(
- 'events' => $eventData,
+ //'events' => $eventData,
+ 'regEventsCount' => $regEventsCount,
+ 'haveRegEvents' => $haveRegEvents,
+ 'regEvents' => $list,
+ 'alphaList' => $alphaList,
+ 'alphaSelected' => $alphaSelected,
+ 'numbDisplayed' => $numbDisplayed,
+ 'lastDisplayed' => $lastDisplayed,
+ 'paging' => $paging,
+ 'prevStart' => $prevStart,
+ 'nextStart' => $nextStart,
+ 'start' => $start,
+ 'limit' => $limit,
);
// Return status, any suggested view, and any data to controller
return array(
// Save plugin configuration object
$this->config = $config;
+ /*
+ * Run constructor for the REgistrations data class
+ *
+ * Note, the third parameter is a flag that indicates to the Contacts
+ * data class that it should flag a group of fields as 'view_only'.
+ */
+ parent::__construct(false, false, true);
}
public function modelAction($actionData = false)
{
+ wp_register_script(
+ 'mybackboneapp',
+ GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . 'js/myBackbone.js',
+ array( 'jquery', 'backbone', 'underscore' ),
+ '1.0',
+ true
+ );
+ wp_enqueue_script( array( 'backbone', 'jquery', 'mybackboneapp' ) );
$regEvent = array();
// Get any provided option
$view = 'registration';
switch ( $option ) {
+ default:
+ // Get the RegEvent entry
+ $entry = $this->getEntry( $eventRegID );
+ //echo '<pre>$entry: ' . print_r( $entry, true ) . '</pre>';
+
+ break;
}
// Compile template data
$templateData = array(
- 'events' => $regEvent,
+ 'eventReg' => $entry,
+ 'events' => array()
);
// Return status, any suggested view, and any data to controller
return array(
<div class="glm-reg-event-list">
- {foreach $events as $event}
+ {foreach $regEvents as $event}
<div class="glm-reg-event-item clearfix">
- <h2><a href="{$thisUrl}?page=registration&eventRegId={$event.id}">{$event.title}</a></h2>
- <p>{$event.short_desc}</p>
+ <h2><a href="{$thisUrl}?page=registration&eventRegId={$event.id}">{$event.event_name}</a></h2>
+ <p>Short description will go here.</p>
</div>
{/foreach}
-<div class="glm-reg-event-list">
+<div id="eventapp"></div>
+<div class="glm-reg-event-list" style="display:none;">
{foreach $events as $event}
<div class="glm-reg-event-item clearfix">
<h2>{$event.title}</h2>
{/foreach}
</div>
+<script>
+var registration = {
+ 'event_name': '{$eventReg.event_name}',
+ 'descr': 'This is only a test'
+};
+</script>