我关注此fiddle过滤TreePanel
。
我的目的是隐藏多个TreeStore
项,具体取决于已记录的帐户username
。
我已经在我的应用程序的login
方法中使用了小提琴的想法,但现在它显示了任何项目!如何克服这种情况?
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: [
{...}
]
},
答案 0 :(得分:1)
rootProperty定义应该在商店的代理阅读器中
前:
Ext.define('MyApp.store.NavMenuTree', {
extend: 'Ext.data.TreeStore',
alias: 'store.navmenutree',
storeId: 'navMenuTree',
proxy : {
type: 'ajax',
reader : {
type: 'json',
rootProperty : 'data'
}
}
答案 1 :(得分:1)
我已成功通过提到的小提琴和我自己的结构来过滤物品。
引发此问题的唯一问题是storeId
TreeStore
属性。它是一个不明原因的评论!当它没有评论时,然后以某种方式删除整个导航菜单项。
所以我回复了评论并在TreeStore
方法上使用了Ext.getStore()
自己的名字。通过这种方式解决了问题并且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;
});
}