gpt4 book ai didi

javascript - ExtJS 组合框和过滤存储

转载 作者:行者123 更新时间:2023-11-28 06:16:09 25 4
gpt4 key购买 nike

我在运行 ExtJS 4.1 组合框和已预先过滤的商店时遇到问题,因为它只是清除过滤器并显示所有数据。

我知道我遇到的问题是由于组合框清除了过滤器并应用了自己的过滤器(有点烦人,因为这不是您立即期望从组合框得到的),但我不确定让它停止的最好方法。

我目前(尝试)使用 MVC 模型以及在单独的存储文件中定义的一些 AJAX 样式存储,该模型在其存储数组中定义存储并在其 View 数组中定义 View ,调用

    var targetStore = this.getStore('app.store.STargets');
targetStore.filter('SOURCE', 'X');
targetStore.load();

作为其初始化函数的一部分

View 中的组合框引用其存储配置变量中 Controller 定义的存储。

xtype: 'combobox',
flex: 75,
fieldLabel: 'Target',
name: 'TargetId',
itemId: 'targetIdCombo',
store: 'app.store.STargets',
valueField: 'SYSID',
displayField: 'DISPLAY_NAME',
//typeAhead: true,
queryMode: 'local',
triggerAction: 'all',
lastQuery: '',
emptyText: 'Select a target',
margin: '0 5 0 0',
listeners: {
scope: this,
change: function () {
this.fireEvent('targetChanged'); // probably needs on select
},
beforequery: function(qe){
// qe.query = qe.query +'&SOURCE=X'
// delete qe.combo.lastQuery;
// delete qe.combo.allQuery;
}

根据文档,您应该对 lastQuery 或 beforequery 事件执行某些操作,尽管目前还不清楚具体是什么。我认为清空内部查询也会阻止它减少您键入时组合框中的项目数量,这不太好,理想情况下我想保留此功能,但仍然过滤我的商店以仅显示带有 SOURCE 的记录='X'。我可以确认我的商店在加载时已被过滤,因为我的数据数组比我的 store.getCount()

从我尝试过的网络示例中:

  • beforequery 中的两个 delete qe.combo 语句 - 结果 = 根本不进行过滤
  • lastQuery 设置为 '' - 结果 = 根本不进行过滤
  • 添加 triggerAction: 'all' - 结果 = 根本不过滤

我还考虑过将 allQuery 与triggerAction all 结合起来,尝试按 SOURCE 进行过滤,但这意味着 View 获取了太多业务逻辑,同样让 Controller 寻找用于轻拂查询的组合框增加了 View 和 Controller 的耦合。

我看到的另一个建议是根据预过滤的数据集创建一个副本存储。这是有道理的,并且应该保持所需的过滤输入行为,但作为一个相对的 Ext 和 JS 初学者,我不确定如何从我的 Angular 引用 Controller 创建的存储,如示例我看到使用了所有先前定义的商店的商店数组(或者我是否打算从过滤的商店在我的 View 中创建副本)

最佳答案

看来我太早应用过滤器了。

Controller 的 init 函数几乎在应用程序启动时被调用,并按预期设置存储的过滤器。

但是,当我导航到我的 View 时,其他一些代码已从我的商店中清除了过滤器,因此组合框再次显示未过滤的列表。

为了纠正这个问题,我将过滤代码绑定(bind)到 View 的“afterrender”事件。

即而不是

Controller.js
init: function () {
...
var targetStore = this.getStore('app.store.STargets');
targetStore.filter('SOURCE', 'X');
}

我现在有:

Controller.js
init: function () {
this.control(
{
'viewitemid': {
afterrender: function(){
var targetStore = this.getStore('app.store.STargets');
targetStore.filter('SOURCE', 'X');
}
});
}

现在按预期过滤我的组合框,并且过滤器未清除

关于javascript - ExtJS 组合框和过滤存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946547/

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