ember.js - EmberData Setting value prevents future autoloads of data after model save -


in emberdata calling model.save() causes model persisted via whatever adapter in place. if adapter returns data (such json api) model updated data.

i have stumbled upon sequence not true.

in voucher system checkout process vouchercode entered on order model. when 'apply' button pressed order saved via order.save() , voucher submitted server.

if voucher code valid vouchervalue field populated number. if voucher code invalid 422 error returned standard errors object per http://emberjs.com/api/data/classes/ds.errors.html

now, here things go awry. if code entered returns vouchervalue of 300 controller property calculates discount.

discount: function () {   var discount = this.get('model.vouchervalue');   // calculation   return discount; }.property('model.vouchervalue') 

if, whatever reason, user enters invalid code return error described above. server removes discount , sets vouchervalue 0

as error response not contain updated data in catch of save manually update it.

order.save().then(function () {  }).catch(function (error) {    order.set('vouchervalue', 0); }); 

the discount computed property updated expected on setting vouchervalue. however, inspecting order model shows order._data.vouchervalue still original 300 value first valid voucher code - emberdata not know value persisted on server.

if enter valid voucher code returns vouchervalue of 300 (the same originally) the discount computed property not recalculated.

it appears ember checking returned data values against order._data , there no difference not triggering property recalculations.

i've tried different workarounds have been unable find works reliably.

frustratingly there not seem reliable way access returned data , manually set vouchervalue returned data. if returned data sets value vouchervalue following true:

order.save().then(function (savedorder) {    savedorder.get('vouchervalue') === 0; //true  }).catch(function (error) {   order.set('vouchervalue', 0); }); 

however, if different voucher entered after invalid voucher , vouchervalue different (say 450) works expected.

is bug in emberdata? there know workaround. i'm open suggestions , willing try before try , reengineer how entire system implemented.

this bit of code seems problem:

order.save().then(function (savedorder) {   savedorder.get('vouchervalue') === 0; //true }).catch(function (error) {   order.set('vouchervalue', 0); }); 

the catch function proxy promise's catch. however, promises expect 2nd parameter passed then function, this:

order.save().then(function (savedorder) {   savedorder.get('vouchervalue') === 0; //true }, function (error) {   order.set('vouchervalue', 0); }); 

this 2nd function represents reject path of resolve/reject pair used promise. see: http://emberjs.com/api/data/classes/ds.model.html#method_save


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -