使用Dojo在某些选项卡中打开URL

时间:2012-01-21 21:49:56

标签: javascript jquery dojo

我有以下功能,我尝试将指定的URL加载到新的或现有的选项卡(contentPane)中,我在大多数情况下使用它,但是当指定现有选项卡时,原始URL仍然会被重新加载而不是添加新的html,如何在没有在创建新选项卡时删除属性refreshOnShow的情况下完成传递现有选项卡的部分?

openTab = function(url,title, id){
    var tab = dijit.byId(id);
    var centerPane = dijit.byId('centerPane');

    if (tab){
       //if target container exists then let's load the url and add it to the container
        centerPane.selectChild(tab);
        $.get(url, function(data) {
          $('#'+id).html(data);

        });
        centerPane.selectChild(tab);


    } else {

        var newTab = new dijit.layout.ContentPane(
                {
              'title': title,
              href:url,
              closable:true,
              selected:true,
              parseOnLoad:true,
              preventCache:true,
              refreshOnShow:true
            }, id);
        centerPane.addChild(newTab);
        centerPane.selectChild(newTab);
    }
};

2 个答案:

答案 0 :(得分:1)

所以你所做的基本上是说,当重新打开这个标签时,让我追加我的内容,并且dojo说,'我刚打开这个标签,并且refreshOnShow是真的,所以让我去获取我的内容从服务器再次'。

我认为解决这个问题最干净的方法就是按照你的说法去做,并将refreshOnShow设置为false。为什么将它设置为true,选项卡是否包含需要从服务器一致刷新的内容?

如果您想要的是这样的(对于现有标签):

  1. 用户点击
  2. Dojo去刷新现有的标签内容
  3. 您的手册(基于jquery)处理程序会获取其他一些内容 并将其附加到(或以其他方式使用)内容dojo 自动刷新
  4. 然后你应该可以做这样的事情:

    newTab.connect(newTab, 'onLoad', function(){
    // do my stuff after the dojo content has loaded
    })
    

    只是为选项卡的contentpane添加了一个事件处理程序,该选项卡在选项卡转到服务器后触发其内容。

答案 1 :(得分:1)

这是我的更新功能的外观,它适用于我:

    openTab = function(url,title, id){
        var tab = dijit.byId(id);
        var centerPane = dijit.byId('centerPane');
        if (tab){
           //if target container exists then let's load the url and add it to the container
            tab.href = url;
            tab.set('title',title);
            centerPane.selectChild(tab);
        } else {        
            var newTab = new dijit.layout.ContentPane(
                {
                  'title': title,
                  href:url,
                  closable:true,
                  selected:true,
                  parseOnLoad:true,
                  preventCache:true,
                  refreshOnShow:true
                }, id);
            centerPane.addChild(newTab);
            centerPane.selectChild(newTab);
        }


    };