在ext.net树面板的特定节点上使用直接事件

本文关键字:节点 事件 net ext | 更新日期: 2023-09-27 18:20:59

我是使用mvc 4的Ext.net的新手。我正在尝试使用树面板和选项卡面板创建布局。当我在树面板上的叶子节点上创建一个节点时,我想使用ajax加载一个页面作为新的选项卡

起初,我使用下面的代码来加载带有侦听器的新选项卡,但它是在iframe中加载的。我希望它作为div加载,但我无法使它工作,所以我改为使用直接事件。

<script>
var mainContainerAddTab = function (tabPanel, id, url, menuItem) {
    var tab = tabPanel.getComponent(id);
    if (!tab) {
        tab = tabPanel.add({
            id: id,
            title: menuItem.raw.text,
            closable: true,
            loader: {
                url: url,
                renderer: 'html',
                loadMask: {
                    showMask: true,
                    msg: 'Loading ' + menuItem.raw.text + '...'
                }
            }
        });
        tab.on('activate', function (tab) {
            var panel = App.MenuTreePanel;
            panel.getSelectionModel().select(panel.getStore().getNodeById(id));
        });
    }
    tabPanel.setActiveTab(tab);
}
</script>

我已经成功地使用下面的代码加载了一个带有直接事件的新选项卡,但我没有得到每个节点的url。

X.TreePanel()
.ID("MenuTreePanel")
.Model(Html.X().Model()
    .Fields(
        new ModelField("url")
    )
)
.Root(
    X.Node().Text("Menu").Expanded(true).Children(
        X.Node()
            .NodeID("ndGadgetTracker")
            .Text("Gadget Tracker")
            .Leaf(true)
            .CustomAttributes(c => { c.Add(new ConfigItem("url", Url.Action("create", "gadgettracker", null, "http"))); }),
    )
)
.DirectEvents(tpde =>
{
    tpde.Select.Url = Url.Action("create", "gadgettracker");
})

那么,有没有一种方法可以在节点中生成directevents?

谢谢你。

在ext.net树面板的特定节点上使用直接事件

问题的直接答案是无法将DirectEvents直接附加到节点。

但是使用TreePanel的Select活动才是真正需要的。您可以在DirectEvent的Before处理程序中修改其Url。

tpde.Select.Url = Url.Action("create", "gadgettracker");
tpde.Select.Before = "o.url = record.get('url');" // "record" is a selected node