Ember.js Controller with computed property not being recomputed -
i'm trying add permissions groups, , have drag , drop set user can pull unselected permissions on selected, or vice versa. unselected permissions computed via removing selected permissions permissions. code functioning properly. first time user brings page, permissions unselected appear in unselected side, , same selected.
however, when user chooses group at, selected side correct, while unselected side shows displayed last group. here route , controller:
app.groupseditroute = ember.route.extend({ setupcontroller: function(controller, model) { this._super(controller, model); controller.set('allpermissions', this.store.find('permission')); }, actions: { 'update': function(group){ var route = this; group.save().then(function(){ route.transitionto('groups'); }); }, 'cancel': function(group){ group.rollback(); this.transitionto('groups'); }, 'delete': function(group){ group.destroyrecord(); this.transitionto('groups'); } } }); app.groupseditcontroller = ember.objectcontroller.extend({ unselectedpermissions: function() { console.log('unselected'); var allpermissions=this.get('allpermissions'); var permissions=this.get('permissions'); var self=this; allpermissions.then( function() { permissions.then( function() { var unselected=allpermissions.filter(function(permission) { return !permissions.contains(permission); }); unselected=ember.arrayproxy.createwithmixins(ember.sortablemixin, { sortproperties: ['name'], content: unselected }); self.set('unselectedpermissions',unselected); }); }); }.property('model.unselectedpermissions'), selectedpermissions: function() { console.log('selected'); return ember.arrayproxy.createwithmixins(ember.sortablemixin, { sortproperties: ['name'], content: this.get('permissions') }); }.property('model.selectedpermissions') });
when use unselectedpermissions in view via {{#each}}, fires once. never see unselected in log after that. however, selected, used in same fashion, fires every time. of course, data displayed on page not updated, either, unless refresh.
the setupcontroller being called each time page displayed, should.
i'm not sure i'm doing wrong.
any ideas?
in general computed properties shouldn't set. when set them destroy computed property portion of code. there couple of different ways handle this, easiest using observer instead of computed property , setting property.
unselectedpermissionlist: [], unselectedwatcher: function() { console.log('unselected'); var allpermissions=this.get('allpermissions'); var permissions=this.get('permissions'); var self=this; allpermissions.then( function() { permissions.then( function() { var unselected=allpermissions.filter(function(permission) { return !permissions.contains(permission); }); unselected=ember.arrayproxy.createwithmixins(ember.sortablemixin, { sortproperties: ['name'], content: unselected }); self.set('unselectedpermissionlist',unselected); }); }); }.observes('selectedpermissions')
the other way return array reference, push objects array after fact.
unselectedwatcher: function() { console.log('unselected'); var allpermissions=this.get('allpermissions'), permissions=this.get('permissions'), self=this, ret = []; allpermissions.then( function() { permissions.then( function() { var unselected=allpermissions.filter(function(permission) { return !permissions.contains(permission); }); unselected=ember.arrayproxy.createwithmixins(ember.sortablemixin, { sortproperties: ['name'], content: unselected }); unselected.foreach(function(item){ ret.pushobject(item); }); }); }); return ret; }.property('selectedpermissions')
additionally 2 properties claim dependent on each other, should fire infinite loop of property updating (a changes, b dirty, b updates, dirty etc).
i'm not sure why selectedpermissions
computed property, seems list that's added or removed from, , unselectedpermissions
allpermisions
not selectedpermissions
Comments
Post a Comment