Javascript 具有数据绑定URL的ExtJS存储未重新评估数据属性
我有一个extjs5viewmodel,它包含一个存储,带有一个使用AJAX代理的JSON读取器 但是,代理的URL依赖于绑定,而绑定替代了ViewModel中的数据属性。但是,URL属性的计算似乎仅在第一次加载ViewModel时完成,而不是在数据属性更改时完成 这段代码应该说明我正在尝试做什么,尽管为了简洁起见,它缺少了一些部分(扩展了语句等) 我使用存储定义视图模型:Javascript 具有数据绑定URL的ExtJS存储未重新评估数据属性,javascript,extjs,viewmodel,Javascript,Extjs,Viewmodel,我有一个extjs5viewmodel,它包含一个存储,带有一个使用AJAX代理的JSON读取器 但是,代理的URL依赖于绑定,而绑定替代了ViewModel中的数据属性。但是,URL属性的计算似乎仅在第一次加载ViewModel时完成,而不是在数据属性更改时完成 这段代码应该说明我正在尝试做什么,尽管为了简洁起见,它缺少了一些部分(扩展了语句等) 我使用存储定义视图模型: Ext.define('sample.ViewModel',{ extend:'Ext.a
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'
}
}
}
}
}
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})
});
}
});
然后是带有网格的视图:
(为了简洁起见,删除了列等)
和更改视图模型数据属性并重新加载存储的控制器:
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'
}
}
}
}
}
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})
});
}
});
如果控制器逻辑中没有“必需的解决方法”,则商店/网格总是尝试从/items/department/0/category/0(即,在实例化ViewModel时的ViewModel数据值)中提取数据
我想知道当ViewModel数据属性更改时,如何强制ExtJS重新计算配置属性(即代理URL)
非常感谢 您遇到的问题是ViewModel会在计时器上滴答作响。在调用
load
时,对set
的调用不会进行计算。如果没有,则会有两次绑定触发器,一次是在设置部门ID
时,第二次是在设置类别ID
时
您可以通过调用notify
,强制ViewModel勾选:
viewModel.set('departmentId', 3);
viewModel.set('categoryId', 4);
viewModel.notify();
store.load();
太棒了,工作很愉快,非常感谢您的快速回复!有没有办法在不使用Ext中的私有方法的情况下做到这一点?