具有数据绑定 URL 的 ExtJS 存储不重新评估数据属性
Posted
技术标签:
【中文标题】具有数据绑定 URL 的 ExtJS 存储不重新评估数据属性【英文标题】:ExtJS store with data-bound URL not re-evaluating data properties 【发布时间】:2014-10-14 18:56:34 【问题描述】:我有一个 ExtJS 5 ViewModel,其中包含一个商店,以及一个使用 AJAX 代理的 JSON 阅读器。
然而,代理的 URL 依赖于绑定,它替代了 ViewModel 数据属性。然而,URL 属性的评估似乎只在 ViewModel 首次加载时完成,而不是在数据属性更改时完成。
为了简洁起见,这段代码应该说明我正在尝试做的事情,尽管它缺少部分(扩展语句等)。
我用商店定义我的视图模型:
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.View',
// ....
items:[
xtype:grid,
bind:'myItems'
]
以及更改视图模型数据属性并重新加载商店的控制器:
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)。
提前非常感谢!
【问题讨论】:
【参考方案1】:您遇到的问题是 ViewModel 在计时器上滴答作响。当您调用 load
时,它不会评估对 set
的调用。如果没有,您将有两次绑定触发器,一次是在您设置 departmentId
时,第二次是在您设置 categoryId
时。
您可以通过调用notify
来强制 ViewModel 打勾:
viewModel.set('departmentId', 3);
viewModel.set('categoryId', 4);
viewModel.notify();
store.load();
【讨论】:
太棒了,辛苦了,非常感谢您的快速回复! 在 Ext 中不使用私有方法的任何方法?以上是关于具有数据绑定 URL 的 ExtJS 存储不重新评估数据属性的主要内容,如果未能解决你的问题,请参考以下文章
当我重新加载网格和存储时,extjs 缓存具有相同名称的图片
store.load 后的 Extjs 网格选择有不正确的数据