ExtJS组合框和过滤存储
ExtJS comboboxes and filtered store
我在运行带有已预过滤的存储的 ExtJS 4.1 组合框时遇到问题,因为它只是清除过滤器并显示所有数据。
我知道我遇到的问题是由于组合框清除过滤器并应用自己的过滤器(有点烦人,因为这不是您立即期望的组合框),但我不确定让它停止的最佳方法。
我目前正在(尝试)将 MVC 模型与在单独的存储文件中定义的一些 AJAX 样式存储一起使用,该模型在其存储数组中定义了存储,在其视图数组中定义了视图,调用
var targetStore = this.getStore('app.store.STargets');
targetStore.filter('SOURCE', 'X');
targetStore.load();
作为其初始化函数的一部分
以及视图中的一个组合框,该组合框引用其存储配置变量中的控制器定义的存储。
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 结合使用,以尝试在那里按 SOURCE 进行过滤,但这有点像视图获得太多的业务逻辑,同样让控制器寻找组合框来轻弹查询会增加视图和控制器的耦合。
我看到的另一个建议是从预过滤的数据集中创建一个副本存储。这是有道理的,并且应该保持所需的键入时过滤器行为,但作为相对的 Ext 和 JS 初学者,我不确定如何从我的视图中引用控制器创建的存储,因为我看到的示例使用 stores 数组,这些数组都是以前定义的存储(或者我是否打算从过滤的存储在我的视图中创建副本)
看来我应用过滤器太早了。
控制器的 init 函数几乎在应用程序启动时被调用,并按预期设置存储的过滤器。
但是,当我导航到我的视图时,其他一些代码已从我的商店中清除了筛选器,因此组合框再次显示未筛选的列表。
为了纠正此问题,我将过滤代码绑定到视图的"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');
}
});
}
现在,这将按预期过滤我的组合框,并且过滤器未清除
- 有可能过滤来自嵌入式YouTube的声音吗
- 将作用域存储在JSON中
- 使用javascript存储变量的最安全方式
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何有效地将游戏数据存储在URL查询字符串中
- Ember.js-接口状态应该存储在哪里
- 如何解雇“;铁局部存储负载”;事件
- 本地存储中的字符串到字节数组转换
- 从jQuery调用存储在Variable中的函数
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 通过精确匹配过滤extjs存储
- ExtJS 6按姓氏或中间名过滤网格的存储
- 根据本地存储中的列表过滤 ng-repeat
- ExtJS组合框和过滤存储
- Rally App SDK 2.0:按用户权限过滤用户存储
- Extjs存储过滤-包括元字符
- 过滤Sencha Touch 2存储,使字段与int值完全匹配
- ExtJS如何更新过滤存储数据