Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在Ext JS中为TreeStore实现filterBy方法?_Javascript_Extjs_Filter_Hide_Treestore - Fatal编程技术网

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
expect
storeId
上无所事事。我会自己解释的。
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;
  });
}