diff --git a/src/canvas/model/Canvas.js b/src/canvas/model/Canvas.js index b9b1b76df..d957748d4 100644 --- a/src/canvas/model/Canvas.js +++ b/src/canvas/model/Canvas.js @@ -29,8 +29,9 @@ export default Backbone.Model.extend({ this.listenTo(em, evPageSelect, this._pageUpdated); }, - _pageUpdated(page) { - console.log('Page updated', page); + _pageUpdated(page, prev) { + prev && prev.getFrames().map(frame => frame.disable()); + this.set('frames', page.getFrames()); }, updateDevice() { diff --git a/src/canvas/model/Frame.js b/src/canvas/model/Frame.js index e39ae5f95..4c3702730 100644 --- a/src/canvas/model/Frame.js +++ b/src/canvas/model/Frame.js @@ -40,10 +40,28 @@ export default Backbone.Model.extend({ this.set('styles', new CssRules(styles, modOpts)); }, + /* + frames: [ + { + components: '
...
', + styles: '#wrapper{...}, .class{...}', + }, { + component: 'i123', // get reference on render + style: 'rules-id' // get reference on render + }, { + components: '
...
', + style: 'rules-id', // get reference on render + } +] + */ getComponent() {}, getStyle() {}, + disable() { + this.trigger('disable'); + }, + remove() { this.view = 0; const coll = this.collection; diff --git a/src/canvas/view/CanvasView.js b/src/canvas/view/CanvasView.js index 4739553d4..6c5fa35f1 100644 --- a/src/canvas/view/CanvasView.js +++ b/src/canvas/view/CanvasView.js @@ -37,19 +37,26 @@ export default Backbone.View.extend({ this.ppfx = this.config.pStylePrefix || ''; this.className = this.config.stylePrefix + 'canvas'; const { em, config } = this; + this.initFrames(); + this.listenTo(em, 'change:canvasOffset', this.clearOff); + this.listenTo(em, 'component:selected', this.checkSelected); + this.listenTo(model, 'change:zoom change:x change:y', this.updateFrames); + this.listenTo(model, 'change:frames', this._renderFrames); + this.listenTo(frames, 'loaded:all', () => em.trigger('loaded')); + this.toggleListeners(1); + }, + + initFrames() { + const { frames, model, config } = this; + frames && frames.remove(); this.frames = new FramesView({ - collection: frames, + collection: model.get('frames'), config: { ...config, canvasView: this, renderContent: 1 } }); - this.listenTo(em, 'change:canvasOffset', this.clearOff); - this.listenTo(em, 'component:selected', this.checkSelected); - this.listenTo(model, 'change:zoom change:x change:y', this.updateFrames); - this.listenTo(frames, 'loaded:all', () => em.trigger('loaded')); - this.toggleListeners(1); }, checkSelected(component, opts = {}) { @@ -328,6 +335,16 @@ export default Backbone.View.extend({ return (view && view._getFrame()) || this.em.get('currentFrame'); }, + _renderFrames() { + this.initFrames(); + const { model, frames, em, framesArea } = this; + const frms = model.get('frames'); + frames.render(); + em.setCurrentFrame(frms.at(0).view); + framesArea.appendChild(frames.el); + this.frame = frms.at(0).view; + }, + render() { const { el, $el, ppfx, model, em, frames } = this; $el.html(this.template()); diff --git a/src/pages/index.js b/src/pages/index.js index 633f3f590..beac0b3fc 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -100,10 +100,10 @@ export default () => { * @returns {this} */ select(pg) { - const { em } = this; + const { em, selected } = this; const page = isString(pg) ? this.get(pg) : pg; this.selected = page; - em && em.trigger(evPageSelect, page); + em && em.trigger(evPageSelect, page, selected); return this; },