From 816b39f48dca65c03e07462edf78848c86618d18 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sun, 17 Jun 2018 13:43:53 +0200 Subject: [PATCH] Add `onAll` method to Component model This allows to pass a callback function with executes on any component inside the model --- src/block_manager/view/BlockView.js | 6 ++++++ src/dom_components/model/Component.js | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/block_manager/view/BlockView.js b/src/block_manager/view/BlockView.js index 6f8f0a7f5..c896810e5 100644 --- a/src/block_manager/view/BlockView.js +++ b/src/block_manager/view/BlockView.js @@ -62,6 +62,12 @@ module.exports = Backbone.View.extend({ if (model.get('select')) { em.setSelected(result); } + + if (model.get('resetId')) { + result.onAll(model => { + console.log(model, model.get); + }); + } } em.set({ diff --git a/src/dom_components/model/Component.js b/src/dom_components/model/Component.js index 4f88c077a..b53504d30 100644 --- a/src/dom_components/model/Component.js +++ b/src/dom_components/model/Component.js @@ -841,6 +841,19 @@ const Component = Backbone.Model.extend(Styleable).extend( const em = this.em; const event = 'component:update' + (property ? `:${property}` : ''); em && em.trigger(event, this); + }, + + /** + * Execute callback function on all components + * @param {Function} clb Callback function, the model is passed as an argument + * @return {self} + */ + onAll(clb) { + if (isFunction(clb)) { + clb(this); + this.components().forEach(model => model.onAll(clb)); + } + return this; } }, {