- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在尝试使用 store filterBy 函数,但我无法使其按我想要的方式工作。我有四个按钮(A B C D)和一个包含与按钮相关的所有数据的列表当我单击按钮时,我应该进行相应的过滤注意:-当我点击 A 时,我应该得到 A 的记录 当我点击 B 时,我应该将 B 的记录附加到 A 的记录列表所以实际上当我点击按钮时我应该有一个按钮 id 数组并使用这些 id 过滤列表。
filterList:function (list, index, target, record){
var categories=[];
categories.push(record.get('id'));
for(c=0;c<categories.length;c++)
{
Ext.getStore('mystore').filterBy(function(record){
var id = record.get('id');
if(id==categories[c])
{
return true;
}
});
}
}
感谢任何帮助。
最佳答案
filterBy
返回函数应始终返回一个 bool 值
。您仅返回 true
,而不返回 false
。除此之外,您正在循环
中过滤
store
,并且参数record
存在两次(作为函数filterList中的参数,在filterBy的返回函数中)。
我创建了一个Fiddle向你展示我的想法。我知道它是 ExtJs
而不是 Sencha Touch
,但您会明白的。我将逐步了解所有逻辑所在的 MainController
。
我没有清理代码,因此存在一些重复,但这只是一个概念。
首先,我在 View
上创建一组按钮。请注意,我正在设置操作属性
。
...
tbar: [{
text: 'Filter a',
action: 'a'
}, {
text: 'Filter b',
action: 'b'
}],
...
然后我将一个 onClick
事件绑定(bind)到该按钮。在这种情况下,我使用操作属性作为 searchValue,但它当然可以是任何东西。
...
onClick: function(button, event, eOpts) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
filters = store.getFilters(),
searchValue = button.action,
regex = RegExp(searchValue, 'i'),
filter = new Ext.util.Filter({
id: button.id,
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
});
if (filters.containsKey(button.id)) {
store.removeFilter(filter);
} else {
store.addFilter(filter);
}
},
...
神奇之处在于过滤器实例
。通过在每次过滤时添加新过滤器实例
,您可以使用多个过滤器进行过滤。如果您按下按钮 a
和按钮 b
,它们将相互尊重。在该过滤器中,我使用正则表达式
来搜索当前模型
的所有数据
。我配置了一个 id
来识别过滤器,以便随后将其删除。
filter = new Ext.util.Filter({
id: button.id,
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
});
如果过滤器不存在,则会添加该过滤器,否则会删除该过滤器。
if (filters.containsKey(button.id)) {
store.removeFilter(filter);
} else {
store.addFilter(filter);
}
我还创建了一个文本字段
来搜索所有数据。我只需调用 clearFilter
并使用新的 searchvalue
添加新的 filter
,而不是添加和删除 filter
。
onKeyUp: function(textField, event, eOpts) {
this.filterStore(textField.getValue());
},
filterStore: function(searchValue) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
regex = RegExp(searchValue, 'i');
store.clearFilter(true);
store.filter(new Ext.util.Filter({
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
}));
}
Ext.define('Filtering.controller.MainController', {
extend: 'Ext.app.Controller',
config: {
refs: {
mainGrid: 'maingrid'
}
},
init: function() {
var me = this;
me.listen({
global: {},
controller: {},
component: {
'segmentedbutton': {
toggle: 'onToggle'
},
'toolbar > button': {
click: 'onClick'
},
'textfield': {
keyup: 'onKeyUp'
}
},
store: {
'*': {
metachange: 'onMetaChange',
filterchange: 'onFilterChange'
}
},
direct: {}
});
},
onLaunch: function() {
var store = Ext.StoreManager.lookup('Users') || Ext.getStore('Users');
store.load();
},
onMetaChange: function(store, metaData) {
var grid = this.getMainGrid(),
model = store.getModel(),
// metadata
fields = metaData.fields,
columns = metaData.columns,
gridTitle = metaData.gridTitle;
model.fields = fields;
grid.setTitle(gridTitle);
grid.reconfigure(store, columns);
},
onFilterChange: function(store, filters, eOpts) {
var me = this,
grid = me.getMainGrid();
grid.getSelectionModel().select(0);
},
/**
* Used for the segmented buttons
*/
onToggle: function(container, button, pressed) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
//filters = store.getFilters(),
searchValue = button.action,
regex = RegExp(searchValue, 'i'),
filter = new Ext.util.Filter({
id: button.id,
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
});
if (pressed) {
store.addFilter(filter);
} else {
store.removeFilter(filter);
}
},
/**
* Used for the toolbar buttons
*/
onClick: function(button, event, eOpts) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
filters = store.getFilters(),
searchValue = button.action,
regex = RegExp(searchValue, 'i'),
filter = new Ext.util.Filter({
id: button.id,
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
});
if (filters.containsKey(button.id)) {
store.removeFilter(filter);
} else {
store.addFilter(filter);
}
},
/**
* Used for the textfield
*/
onKeyUp: function(textField, event, eOpts) {
this.filterStore(textField.getValue());
},
filterStore: function(searchValue) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
regex = RegExp(searchValue, 'i');
store.clearFilter(true);
store.filter(new Ext.util.Filter({
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
}));
}
});
Ext.define('Filtering.view.MainGrid', {
extend: 'Ext.grid.Panel',
xtype: 'maingrid',
tbar: [{
xtype: 'segmentedbutton',
allowMultiple: true,
items: [{
text: 'Filter a',
action: 'a'
}, {
text: 'Filter b',
action: 'b'
}]
}, {
text: 'Filter a',
action: 'a'
}, {
text: 'Filter b',
action: 'b'
}, {
xtype: 'textfield',
emptyText: 'Search',
enableKeyEvents: true
}],
//title: 'Users', // Title is set through the metadata
//store: 'Users', // we reconfigure the store in the metachange event of the store
columns: [] // columns are set through the metadata of the store (but we must set an empty array to avoid problems)
});
关于javascript - Sencha Touch 商店过滤器按功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32863305/
我对这个话题有点怀疑。 情况: 我进行了一项研究,其中指出 Sencha Touch 2 (further Sencha) 和 DHTMLX Touch (further DHTMLX) 是可供选择的
我的移动应用程序目前在 Sencha Touch 1.1.1 下运行。现在,我想将其升级到 Sencha Touch 2.0。有人可以帮我做这件事吗?升级时我应该注意哪些一般步骤? 另外,是否有帮助该
在他们的文档中找不到指定了所有日期时间格式的位置? 我想要一个日期看起来像这样 13 Jan 2013 我发现了这个模式: date("F j, Y") 但这给了我很长的月份名称。 (不知道为什么他们
我需要一个简单的嵌套 ListView 示例。沿着这条线的东西...... (来源:roosteronacid.com) 当您单击一个项目时,您将转换(滑动)到包含另一个列表的下一个 View /卡片
scons 使用 MD5 哈希值而不是文件修改时间来确定是否需要构建依赖项。 我希望这是默认行为。但是,除了编辑文件以使其不同之外,是否有任何方法可以强制它假设特定文件已过期(相当于“触摸”)? 编辑
我有一个 sencha touch 显示在列表中的联系人列表。然后,当您单击列表中的姓名时,它应该向右滑动并说您好 {联系人姓名}!但是当它现在滑过时,它只是说你好!第 29 行是项目点击的 Acti
我是一名 Ext 老手,但我需要创建一些相当简单的移动应用程序,自然而然我正在研究 sencha touch。 Ting 是 - 大多数示例无法在 Firefox/Opera 中运行。 我很高兴使用
只是想知道在 Sencha Touch 中是否有处理该问题的方法。一个商店,应用不同的过滤器后,商店可以用于不同的地方。 例如: 我有一家商店: Ext.regModel('abc', { f
如何覆盖浏览器后退按钮的功能?我在页面中有导航 View ,我想同步浏览器后退按钮和导航 View 的后退按钮。我可以覆盖导航按钮的功能,但我不知道如何为浏览器返回做同样的事情。 我们将不胜感激。 最
如何使用两个 Action 创建 UIButton。 我知道通过使用 UILongPressGestureRecognizer 我们可以执行 Longpress。 但我的要求是,当我长按 UIButt
如何在 Ext.panel 中动态添加新项目?这是我正在使用的代码; app.views.ViewItem = Ext.extend(Ext.Panel, { id: '0', doc
我有一个全屏按钮(我将其放置在 IB 中),其中包含一个图像,当用户单击它时,我希望将其滑出屏幕。我知道连接正常,因为单击按钮时我可以记录一些内容。但是我之前用来移动 UIViews 和 UIImag
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
大家好,我目前正在为 iPhone 开发一款节奏游戏,只是想知道是否有人对用于 react 时间的最佳作品有任何想法。 我已经完成了所有编码,并将其范围缩小到大约 2 种方式: 1:使用绕过 UICo
我正在尝试使用XCode编码计算器,但是后来我看到带有逗号的数字只是在逗号后被切掉了。 我正在用文本代码获取带有此代码的数字。 -(IBAction)Additionbutton:(id)sender
Sencha Touch 中是否有控件可以显示如下图所示的密码字段? 最佳答案 不,没有本地组件可以做到这一点。但是您可以自己构建它:它是一个包含 4 个输入字段和十几个按钮的表单。有关详细信息,请参
出于某种原因,我的表单面板没有显示。谁能帮忙?如果这很明显,我是新手,很抱歉!它是用 Sencha Architect 构建的,但我不明白为什么没有字段显示在表单中?... Ext.define('M
我创建了一个基于表格的模板,因此我可以获得类似网格的感觉。我的问题是,当我单击表格行时,如何弹出警报(带有 td 信息)。 这是我的 getUserList.js 文件 Ext.regMode
他们无论如何要更改圆形矩形按钮的白色部分而不制作自定义按钮吗? 最佳答案 嗯,差不多。您必须将其设置为自定义但不继承 UIButton。那么你应该能够做类似的事情 myButton.layer.cor
有人可以给我指点 Sencha Touch 和 Javascript 的初学者教程吗?我对 HTML 和 Javascript & CSS 知之甚少。我需要学习高级 Javascript 和指南针/主
我是一名优秀的程序员,十分优秀!