gpt4 book ai didi

javascript - 带有数据绑定(bind) URL 的 ExtJS 存储不重新评估数据属性

转载 作者:行者123 更新时间:2023-11-30 12:34:52 27 4
gpt4 key购买 nike

我有一个 ExtJS 5 ViewModel,其中包含一个商店,以及一个使用 AJAX 代理的 JSON 阅读器。

然而,代理的 URL 依赖于绑定(bind),它替代了 ViewModel 数据属性。但是,URL 属性的评估似乎仅在第一次加载 ViewModel 时完成,而不是在数据属性更改时完成。

这段代码应该说明我正在尝试做什么,即使在这篇文章中为了简洁起见它缺少部分(扩展语句等)。

我用商店定义我的 View 模型:

    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'
}
}
}
}
}

然后是带有网格的 View :(为简洁起见删除了列等)

    Ext.define('sample.View',{
// ....
items:[{
xtype:grid,
bind:'{myItems}'
}]

}

以及更改 View 模型数据属性并重新加载商店的 Controller :

    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})
});
}
});

如果 Controller 逻辑中没有“必需的解决方法”,存储/网格总是尝试从/items/department/0/category/0 中提取数据(即实例化 ViewModel 时的 ViewModel 数据值)。

我想知道如何在 ViewModel 数据属性更改时强制 ExtJS 重新评估配置属性(即代理 URL)。

非常感谢!

最佳答案

您遇到的问题是 ViewModel 在计时器上计时。在您调用 load 时,它不会评估对 set 的调用。如果没有,您将触发两次绑定(bind),一次是在您设置 departmentId 时,第二次是在您设置 categoryId 时。

您可以通过调用 notify 强制 ViewModel 进行 tick:

viewModel.set('departmentId', 3);
viewModel.set('categoryId', 4);
viewModel.notify();
store.load();

关于javascript - 带有数据绑定(bind) URL 的 ExtJS 存储不重新评估数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26368253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com