Javascript 无法在Ext JS中为TreeStore实现filterBy方法?
下面是过滤Javascript 无法在Ext JS中为TreeStore实现filterBy方法?,javascript,extjs,filter,hide,treestore,Javascript,Extjs,Filter,Hide,Treestore,下面是过滤TreePanel的步骤。 我的目标是隐藏几个TreeStore项目,具体取决于登录帐户的username 我曾经在我的应用程序的login方法上使用过fiddle的想法,但现在它显示了任何一项!如何克服这种情况 login: function (username, password) { var me = this; var params = { // Headers 'username'
TreePanel
的步骤。
我的目标是隐藏几个TreeStore
项目,具体取决于登录帐户的username
我曾经在我的应用程序的login
方法上使用过fiddle的想法,但现在它显示了任何一项!如何克服这种情况
login: function (username, password) {
var me = this;
var params = {
// Headers
'username': username,
'password': password,
...
};
var loginReq = {...} // Saves token with a promise function
if (username === 'test@useradress.com') {
var treeStore = Ext.getStore('navMenuTree');
//debugger; //Error raises on here but doesn't give any error on console.
treeStore.filterBy(function (item) {
if (item.get('root') === true) return true;
else if (item.get('visibleModule') === 1) return true;
else return false;
});
}
return loginReq;
},
我已经定义了小提琴上提到的TreeStore
Ext.define('MyApp.store.NavMenuTree', {
extend: 'Ext.data.TreeStore',
alias: 'store.navmenutree',
storeId: 'navMenuTree',
fields: [{
name: 'text'
}],
root: {
expanded: true,
defaultRootProperty: 'data',
visibleModule: 1, //Here it is.
data: [
{
text: 'First Menu Item', //Which should be "visible"
visibleModule: 1,
iconCls: 'x-fa fa-thumbs-up',
expanded: false,
selectable: false,
data: [
{
text: translations.dashboard,
iconCls: 'x-fa fa-area-chart',
viewType: 'dash',
leaf: true,
visibleModule: 1 // As well childrens should be visible
},
{
text: translations.bonus,
iconCls: 'x-fa fa-pencil-square-o',
viewType: 'bonuslist',
leaf: true,
visibleModule: 1 //Here also!
}
]
},
{
text: 'Menu Item 2', //Which should be "hide"
visibleModule: 2,
iconCls: 'x-fa fa-usd',
expanded: false,
selectable: false,
data: [
{...}
]
},
rootProperty定义应位于存储的代理的读取器中 例:
我已经成功地通过所提到的小提琴和我自己的结构来过滤项目 唯一引起问题的是
TreeStore
的storeId
属性。它被评论的原因不得而知!当它没有被评论,然后不知何故删除了整个导航菜单项
因此,我对它进行了回复,并在Ext.getStore()
方法中使用了TreeStore
自己的名称。这样就解决了问题,scenerio工作得非常完美
if (username === 'test@useradress.com') {
//Updated only this part. In my case it's Ext.getStore('NavMenuTree')
var treeStore = Ext.getStore('NameOfTreeStore');
treeStore.filterBy(function (item) {
if (item.get('root') === true) return true;
else if (item.get('visibleModule') === 1) return true;
else return false;
});
}
哇!不幸的是,
如果登录
功能中的
语句正在删除不同帐户的整个导航菜单
项我无法正确设计函数。据我所知,defaultRootProperty:'data',
必须直接在存储中,而不是在根中。除此之外,我看不出你的代码有任何错误,也许你可以用小提琴来复制。@Alexander谢谢你的评论。我让它在不改变任何东西的情况下工作,比如defaultRootProperty
行。@Alexander我还有一个问题;正如我所说,当登录到应用程序时,过滤正在工作。但不知何故,当我重新加载页面时,它会将整个菜单项带回来。是否可以在TreeStore
文件而不是登录文件上定义if station
?当我将其设置为root
属性(如您所述)时,会出现以下错误:未捕获错误:[Ext.createByAlias]无法识别的别名:代理。未定义
我忘了添加我编辑并添加的类型配置。在您的案例中,代理可以被存储很多用于回复的存储库。现在,我让它在TreeStore
expectstoreId
上无所事事。我会自己解释的。
if (username === 'test@useradress.com') {
//Updated only this part. In my case it's Ext.getStore('NavMenuTree')
var treeStore = Ext.getStore('NameOfTreeStore');
treeStore.filterBy(function (item) {
if (item.get('root') === true) return true;
else if (item.get('visibleModule') === 1) return true;
else return false;
});
}