gpt4 book ai didi

extjs - ExtJS 4 : TreeStore with both static and dynamically-loaded data?

转载 作者:行者123 更新时间:2023-12-04 13:20:45 25 4
gpt4 key购买 nike

我正在制作一个看起来像这样的TreePanel:

目前,我用以下代码“模拟”了它:

treePanel.setRootNode({
text: 'Root',
expanded: true,
children: [
{
text: 'General Settings',
icon: kpc.cfg.baseUrl.img+'/icon_gears-bluegreen.gif',
leaf: true
},
{
text: 'Users',
icon: kpc.cfg.baseUrl.img+'/icon_users-16x16.gif',
expanded: true,
children: [
{
text: 'Dummy User 1',
icon: kpc.cfg.baseUrl.img+'/icon_user-suit.gif',
leaf: true
},
{
text: 'Dummy User 2',
icon: kpc.cfg.baseUrl.img+'/icon_user-suit.gif',
leaf: true
},
{
text: 'Dummy User 3',
icon: kpc.cfg.baseUrl.img+'/icon_user-suit.gif',
leaf: true
},
{
text: 'Dummy User 4',
icon: kpc.cfg.baseUrl.img+'/icon_user-suit.gif',
leaf: true
}
]
}
]
});

如何动态加载单个用户(即通过商店)? 换句话说,如何使TreeStore既包含静态项又包含动态加载项?

谢谢!

最佳答案

最适合我的解决方案是:

  • 创建两个树存储-一个具有静态内容,另一个用于从服务器加载我的用户模型。
  • 将动态加载的树“绘制”到静态树上。

  • 我写了一个小教程,其中包含一个可运行的演示 here(以防有人想要更详细的答案),但从较高的角度看,代码如下所示:
    Ext.define('demo.UserModel', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name', 'profile_image_url']
    });


    var userTreeStore = Ext.create('Ext.data.TreeStore', {

    model: 'demo.UserModel',

    proxy: {
    type: 'jsonp',
    url : 'https://myserver/getusers',
    reader: {
    type: 'json',
    root: 'users'
    }
    },

    listeners: {

    // Each demo.UserModel instance will be automatically
    // decorated with methods/properties of Ext.data.NodeInterface
    // (i.e., a "node"). Whenever a UserModel node is appended
    // to the tree, this TreeStore will fire an "append" event.
    append: function( thisNode, newChildNode, index, eOpts ) {

    // If the node that's being appended isn't a root node, then we can
    // assume it's one of our UserModel instances that's been "dressed
    // up" as a node
    if( !newChildNode.isRoot() ) {
    newChildNode.set('leaf', true);

    newChildNode.set('text', newChildNode.get('name'));
    newChildNode.set('icon', newChildNode.get('profile_image_url'));
    }
    }
    }
    });

    userTreeStore.setRootNode({
    text: 'Users',
    leaf: false,
    expanded: false // If this were true, the store would load itself
    // immediately; we do NOT want that to happen
    });

    var settingsTreeStore = Ext.create('Ext.data.TreeStore', {
    root: {
    expanded: true,
    children: [
    {
    text: 'Settings',
    leaf: false,
    expanded: true,
    children: [
    {
    text: 'System Settings',
    leaf: true
    },
    {
    text: 'Appearance',
    leaf: true
    }
    ]
    }
    ]
    }
    });

    // Graft our userTreeStore into the settingsTreeStore. Note that the call
    // to .expand() is what triggers the userTreeStore to load its data.
    settingsTreeStore.getRootNode().appendChild(userTreeStore.getRootNode()).expand();

    Ext.create('Ext.tree.Panel', {
    title: 'Admin Control Panel',
    store: settingsTreeStore,
    });

    关于extjs - ExtJS 4 : TreeStore with both static and dynamically-loaded data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491638/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com