cartodb/lib/assets/javascripts/builder/components/carousel-form-view.js

60 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-06-15 10:58:47 +08:00
var _ = require('underscore');
var CoreView = require('backbone/core-view');
var CarouselView = require('./custom-carousel/custom-carousel-view');
/**
* Carousel form view
*/
module.exports = CoreView.extend({
module: 'components:carousel-form-view',
className: 'js-aggregationTypes',
initialize: function (opts) {
if (!opts.collection) throw new Error('Carousel collection is required');
if (!opts.template) throw new Error('template is required');
this.template = opts.template;
this._initBinds();
},
render: function () {
var selectedItem = this.collection.getSelected();
var selectedName = selectedItem && selectedItem.getName();
this.$el.html(
this.template({
name: selectedName
})
);
this._initViews();
return this;
},
_initBinds: function () {
this.collection.bind('change:highlighted', this._onChangeHighlighted, this);
},
_initViews: function () {
var carousel = new CarouselView(_.extend(this.options, {
collection: this.collection
}));
if (!this.$('.js-selector').length) throw new Error('HTML element with js-selector class is required');
this.$('.js-selector').append(carousel.render().el);
carousel.initScroll();
this.addView(carousel);
},
_onChangeHighlighted: function () {
var item = this.collection.getHighlighted() || this.collection.getSelected();
if (item) {
var $el = this.$('.js-highlight');
if ($el) {
$el.text(item.getName());
}
}
}
});