/*jshint multistr:true */ // Field Info // // For each field // // Id / Label / type / format // Editor -- to change type (and possibly format) // Editor for show/hide ... // Summaries of fields // // Top values / number empty // If number: max, min average ... // Box to boot transform editor ... this.recline = this.recline || {}; this.recline.View = this.recline.View || {}; (function($, my) { "use strict"; my.Fields = Backbone.View.extend({ className: 'recline-fields-view', template: ' \
\

Fields +

\ {{#fields}} \
\
\ \

\ {{label}} \ \ {{type}} \ » \ \

\
\
\
\ {{#facets}} \
\
    \ {{#terms}} \
  • {{term}} [{{count}}]
  • \ {{/terms}} \
\
\ {{/facets}} \
\
\
\
\ {{/fields}} \
\ ', initialize: function(model) { var self = this; _.bindAll(this, 'render'); // TODO: this is quite restrictive in terms of when it is re-run // e.g. a change in type will not trigger a re-run atm. // being more liberal (e.g. binding to all) can lead to being called a lot (e.g. for change:width) this.listenTo(this.model.fields, 'reset', function(action) { self.model.fields.each(function(field) { field.facets.unbind('all', self.render); field.facets.bind('all', self.render); }); // fields can get reset or changed in which case we need to recalculate self.model.getFieldsSummary(); self.render(); }); this.$el.find('.collapse').collapse(); this.render(); }, render: function() { var self = this; var tmplData = { fields: [] }; this.model.fields.each(function(field) { var out = field.toJSON(); out.facets = field.facets.toJSON(); tmplData.fields.push(out); }); var templated = Mustache.render(this.template, tmplData); this.$el.html(templated); } }); })(jQuery, recline.View);