diff --git a/app/controllers/deployments/single.js b/app/controllers/deployments/single.js index d03195c2d6e2c555c55389e4408190dba99534be..7ebb0b8533139267848b9f67045d9691c9398fde 100644 --- a/app/controllers/deployments/single.js +++ b/app/controllers/deployments/single.js @@ -14,8 +14,9 @@ export default Ember.Controller.extend({ init() { this.debug('initializing controller'); }, - // gets automatically updated when any of the instances changes (updated from changelog stream) - graphModel: Ember.computed(`model.instances.{${observables.join(',')}}.[]`, function() { + // gets automatically updated when any of the instances changes, changes are notified via a pseudo property 'updated' + // using @each will also listen if the array itself changes. Can be quite expensive. + graphModel: Ember.computed(`model.instances.{${observables.join(',')}}.@each._updated`, function() { const systemId = this.get('model.systemId'); const instances = this.get('model.instances'); /* diff --git a/app/services/changelog-parser.js b/app/services/changelog-parser.js index f6eb15975349ef28a18661a30b23784f41b17d7f..ca36fb98c2e056c6bd93b7cf4e817f650f6f48fb 100644 --- a/app/services/changelog-parser.js +++ b/app/services/changelog-parser.js @@ -1,5 +1,6 @@ import Ember from 'ember'; +// TODO: update cytoscape instead of complete rerender export default Ember.Service.extend({ store: Ember.inject.service(), parse(changelogs) { @@ -21,7 +22,7 @@ export default Ember.Service.extend({ const normalized = store.normalize(data.type, data); // using application serializer store.push(normalized); }, - UPDATE(changelog) { // FIXME: does not update view! + UPDATE(changelog) { const data = changelog.data; const oldRecord = this.get('store').peekRecord(data.type, data.id); this.debug('oldRecord', oldRecord); @@ -29,6 +30,7 @@ export default Ember.Service.extend({ throw new Error(`old record for update operation not found! Id: ${data.id}`); } oldRecord.setProperties(data); + oldRecord.notifyPropertyChange('_updated'); // notify about pseudo property, can be listened on (see deployments/single controller) }, DELETE(changelog) { const data = changelog.data;