Monday 15 March 2010

javascript - ExtJS store with data-bound URL not re-evaluating data properties -



javascript - ExtJS store with data-bound URL not re-evaluating data properties -

i've extjs 5 viewmodel contains store, json reader using ajax proxy.

the url of proxy relies on binding, substitutes in viewmodel info properties. appears evaluation of url property done first time viewmodel loads, , not when info property changes.

this code should illustrate i'm trying do, though missing parts (extends statements, etc.) brevity in post.

i define view model store:

ext.define('sample.viewmodel',{ extend:'ext.app.viewmodel', data:{ departmentid:0, categoryid:0 } stores:{ myitems:{ autoload:false, fields:['id','name','price'], proxy:{ type:'ajax', url:'/items/department/{departmentid}/category/{categoryid}', reader:{ rootproperty:'data', successproperty:'success' } } } } }

then view grid: (columns, etc. removed brevity)

ext.define('sample.view',{ // .... items:[{ xtype:grid, bind:'{myitems}' }] }

and controller changes view model info properties , reloads store:

ext.define('sample.viewcontroller',{ // ... handlesomeevent:function(){ var viewmodel = this.getviewmodel(); var store = viewmodel.getstore('myitems'); viewmodel.set('departmentid', 3); viewmodel.set('categoryid', 4); // desired behavior store.load(); // required workaround viewmodel.bind('/items/department/{departmentid}/category/{categoryid}', function(newurl){ store.load({url: newurl}) }); } });

without "required workaround" in controller logic store / grid tries pull info /items/department/0/category/0 (i.e. viewmodel info values @ time viewmodel instantiated).

i'd know how forcefulness extjs re-evaluate config properties (i.e. proxy url) when viewmodel info properties change.

much in advance!

the problem you're having viewmodel ticks on timer. time phone call load, it's not evaluated calls set. if didn't, you'd have binding trigger twice, 1 time when set departmentid, sec time when set categoryid.

you can forcefulness viewmodel tick calling notify:

viewmodel.set('departmentid', 3); viewmodel.set('categoryid', 4); viewmodel.notify(); store.load();

javascript extjs viewmodel

No comments:

Post a Comment