Extjs 如何在sencha touch中过滤存储或数据视图?
我有一个dataview,它显示存储区中的json数据。 Ext.define('app.view.Abouttest', { extend: 'Ext.Panel', xtype: 'abouttest',Extjs 如何在sencha touch中过滤存储或数据视图?,extjs,sencha-touch,Extjs,Sencha Touch,我有一个dataview,它显示存储区中的json数据。 Ext.define('app.view.Abouttest', { extend: 'Ext.Panel', xtype: 'abouttest', config: { title: 'Player Info', iconCls: 'user', layout: 'vbox', scrollable:
Ext.define('app.view.aboutset'{ 扩展:“Ext.Panel”, xtype:“Aboutettest”config: { title: 'Player Info', iconCls: 'user', layout: 'vbox', scrollable: true, height: 800, fullscreen: false, items: [ { docked: 'top', xtype: 'toolbar', id: 'toolbarId', title: 'Player Info' }, { xtype: 'dataview', store: 'Articles', itemTpl: '<div>{content}</div>', height: 400 } ] } }); </pre>
<pre> Ext.define('app.model.Article', { extend: 'Ext.data.Model', config: { fields: [ 'id', {name: 'parent', type: 'int'}, {name: 'title', type: 'string'}, {name: 'content', type: 'string'} ] } }); Ext.define('app.store.Articles', { extend: 'Ext.data.Store', requires: ['app.model.Article'], config: { model: 'app.model.Article', autoLoad: true, proxy: { type: 'ajax', url: 'resources/json/articles.json', noCache: false, enablePagingParams: false, reader: { type: "json", rootProperty: 'pages' } } } }); </pre>
filterById: function(recordId) { var store = Ext.getStore('Articles'); if (recordId) { store.filterBy(function(rec) { return rec.get('id') === recordId; }); } else { store.clearFilter(); } }
这是另一个视图中嵌套列表中使用的模型和存储:config:{ 标题:“玩家信息”, iconCls:'用户', 布局:“vbox”, 可滚动:对, 身高:800, 全屏:假, 项目:[ { 停靠:“顶部”, xtype:'工具栏', id:'工具栏id', 标题:“玩家信息” }, { xtype:“数据视图”, 商店:'物品', itemTpl:“{content}”, 身高:400 } ] } });
可以向Abouttest视图添加哪些代码来过滤存储数据,以便根据其ID显示一条记录 这是视图的最终版本Ext.define('app.model.Article'{ 扩展:“Ext.data.Model”, 配置:{ 字段:[ “id”, {name:'parent',type:'int'}, {name:'title',type:'string'}, {name:'content',type:'string'} ] } }); Ext.define('app.store.Articles'{ 扩展:“Ext.data.Store”, 需要:['app.model.Article'], 配置:{ 模型:“app.model.Article”, 自动加载:对, 代理:{ 键入:“ajax”, url:'resources/json/articles.json', 诺卡奇:错, enablePagingParams:false, 读者:{ 键入:“json”, rootProperty:“页面” } } } });
我会从控制器中筛选视图,但当您想从视图中筛选视图时,可以通过向视图中添加以下方法之一并调用它们来实现:Ext.define('app.view.aboutset'{ 扩展:“Ext.Panel”, xtype:“Aboutettest”, 配置:{ 标题:“玩家信息”, iconCls:'用户', 布局:“vbox”, 可滚动:对, 身高:800, 全屏:假, 项目:[ { 停靠:“顶部”, xtype:'工具栏', id:'工具栏id' }, { xtype:“数据视图”, 商店:'物品', itemTpl:“{content}”, 身高:400 } ] }, 初始化:函数(eOpts){ var store=Ext.getStore('Articles'); if(存储加载){ store.on('load',function(){ 存储过滤器(功能(rec){ 返回rec.get('id')='246'; }); }); } } });
或者(从组件而不是直接获取存储) 祝你好运, 抢劫 编辑:添加了完整的示例 好的,最后一次尝试;)Ext.define('app.store.Articles', { extend: 'Ext.data.Store', requires: ['app.model.Article'], config: { model: 'app.model.Article', autoLoad: true, sorters: 'content', filters: [{ property: 'id', }], proxy: { type: 'ajax', url: 'resources/json/articles.json', noCache: false, enablePagingParams: false, reader: { type: "json", rootProperty: 'pages' } } } });
- 去
- 打开javascript控制台
- 将下面的代码片段粘贴到其中
Ext.define('app.model.Article'{
扩展:“Ext.data.Model”,
配置:{
字段:[
“id”{
名称:'父',
键入:“int”
}, {
姓名:'头衔',
键入:“字符串”
}, {
名称:'内容',
键入:“字符串”
}
]
}
});
Ext.define('app.store.Articles'{
扩展:“Ext.data.Store”,
需要:['app.model.Article'],
配置:{
模型:“app.model.Article”,
//自动加载:对,
数据:[{
id:1,
父项:null,
标题:"第一篇文章",,
内容:“知识产权”是一种权利,是一种精英的权利。它是一种平等的解决方案
},
{
id:2,
父项:null,
标题:"第二条",,
内容:“知识产权”是一种权利,是一种精英的权利。它是一种平等的解决方案
},
{
id:3,
父项:null,
标题:"第三条",,
内容:“知识产权”是一种权利,是一种精英的权利。它是一种平等的解决方案
}]
//代理:{
//键入:“ajax”,
//url:'resources/json/articles.json',
//诺卡奇:错,
//enablePagingParams:false,
//读者:{
//键入:“json”,
//rootProperty:“页面”
// }
// }
}
});
Ext.create('app.store.Articles'{
storeId:“文章”
});
Ext.define('app.view.aboutset'{
扩展:“Ext.Panel”,
xtype:“Aboutettest”,
配置:{
标题:“玩家信息”,
iconCls:'用户',
布局:“vbox”,
可滚动:对,
身高:800,
全屏:假,
项目:[{
停靠:“顶部”,
xtype:'工具栏',
id:'工具栏id',
标题:“玩家信息”,
项目:[{
xtype:“间隔器”
},{
xtype:'按钮',
文本:“清除过滤器”,
处理程序:函数(按钮){
button.up('AboutSet').down('dataview').getStore().clearF
Ext.define('app.model.Article', {
extend: 'Ext.data.Model',
config: {
fields: [
'id', {
name: 'parent',
type: 'int'
}, {
name: 'title',
type: 'string'
}, {
name: 'content',
type: 'string'
}
]
}
});
Ext.define('app.store.Articles', {
extend: 'Ext.data.Store',
requires: ['app.model.Article'],
config: {
model: 'app.model.Article',
// autoLoad: true,
data: [{
id: 1,
parent: null,
title: 'First article',
content: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Placeat impedit quaerat reiciendis eveniet soluta commodi.'
},
{
id: 2,
parent: null,
title: 'Second article',
content: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Placeat impedit quaerat reiciendis eveniet soluta commodi.'
},
{
id: 3,
parent: null,
title: 'Third article',
content: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Placeat impedit quaerat reiciendis eveniet soluta commodi.'
}]
// proxy: {
// type: 'ajax',
// url: 'resources/json/articles.json',
// noCache: false,
// enablePagingParams: false,
// reader: {
// type: "json",
// rootProperty: 'pages'
// }
// }
}
});
Ext.create('app.store.Articles', {
storeId: 'Articles'
});
Ext.define('app.view.Abouttest', {
extend: 'Ext.Panel',
xtype: 'abouttest',
config: {
title: 'Player Info',
iconCls: 'user',
layout: 'vbox',
scrollable: true,
height: 800,
fullscreen: false,
items: [{
docked: 'top',
xtype: 'toolbar',
id: 'toolbarId',
title: 'Player Info',
items: [{
xtype: 'spacer'
},{
xtype: 'button',
text: 'clear filter',
handler: function(button) {
button.up('abouttest').down('dataview').getStore().clearFilter();
}
},{
xtype: 'button',
text: 'inline filter',
handler: function(button) {
button.up('abouttest').down('dataview').getStore().filterBy(function(rec) {
return rec.get('id') === 1;
});
}
},
{
xtype: 'button',
text: 'component filter',
handler: function(button) {
button.up('abouttest').filterFoo();
}
}]
}, {
xtype: 'dataview',
store: 'Articles',
itemTpl: '<h1>{title}</h1><div>{content}</div>',
height: 400
}]
},
filterFoo: function() {
this.down('dataview').getStore().filterBy(function(rec) {
return rec.get('id') === 1;
});
}
});
Ext.Viewport.removeAll();
Ext.Viewport.add({
xtype: 'abouttest'
});
Ext.define('app.store.Articles', {
extend: 'Ext.data.Store',
requires: ['app.model.Article'],
config: {
model: 'app.model.Article',
autoLoad: true,
sorters: 'content',
filters: [{
property: 'id',
}],
proxy: {
type: 'ajax',
url: 'resources/json/articles.json',
noCache: false,
enablePagingParams: false,
reader: {
type: "json",
rootProperty: 'pages'
}
}
}
});