2013-07-05 6 views
1

나는 mvc가있는 Ext.net을 처음 사용합니다. 4. treepanel과 탭 패널을 사용하여 레이아웃을 만들려고합니다. treepanel의 리프 노드에있는 노드에서 새 탭으로 ajax를 사용하여 페이지를로드하려고합니다.ext.net treepanel의 특정 노드에서 직접 이벤트 사용

처음에는 리스너와 함께 새 탭을로드하기 위해 다음 코드를 사용했지만 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"); 
}) 

그래서 노드에서 직접 이벤트를 만드는 방법이 있습니까?

감사합니다.

답변

3

질문에 대한 직접적인 대답은 DirectEvent를 노드에 직접 연결하는 것이 아닙니다.

그러나 TreePanel의 Select 이벤트를 사용하면 실제로 필요한 것입니다. Before 핸들러 내에서 DirectEvent의 Url을 수정할 수 있습니다.

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

o는 어떤 개체를 나타 냅니까? 나는 그것을 시도했지만 url 또는 url에 대한 매개 변수로 전달 된 것을 보지 못했습니다. –

+0

내 실수. 동일한 URL을 사용하고있었습니다. 덕분에,이 해결 :) –