0

我有一些标签,其内容是我网站的全部功能部分。

例如,在我的管理区域,我有标签 [添加/删除相册][添加照片][删除照片]。我在技术上通过选项卡划分管理区域。

我正在使用 ajax 将内容加载到这些选项卡中。选项卡内容区域是一个 div。

选项卡内容区域内的视图也使用 ajax 来加载内容。这些是在选项卡内容区域内运行的 ajax 调用。

只要选项卡内容区域内的视图保持不变或仅部分更改,一切正常。But when certain interactions inside tab content area return a whole new view, tab content area would not show them.

我知道会发生什么,返回的这个新视图没有传递到选项卡内容区域 div 中。

在 firebug 中,我可以看到 ajax 成功函数响应显示了返回的新视图。但我不知道如何将该新视图传递给选项卡内容区域。

如果有人能帮助我解释如何解决这个问题或如何在 CI 中管理选项卡内的内容,我将不胜感激。

adminTabsview.php

<ul id="adminTabs"> 
    <li ><?php echo anchor('#album_addDelete', 'Album Add/Delete'); ?></li>     
</ul>   
<div id="adminTabsContent"></div>

$(document).ready(function(){   
$('#adminTabs a').on({      
    click: function (evt){          
        evt.preventDefault();           
        var page = this.hash.substr(1);          
         adminTabsAjaxCall(page);           
    }   
});
});

function adminTabsAjaxCall ($data){

$.ajax({
    type: "POST",
    url: "index.php/adminsite_controller/"+ $data + "/",
    dataType: "html",
    data: $data,
    statusCode: {removed}
            },
    success: adminTabContent        

});

function adminTabContent (data){            
    $('#adminTabsContent').html(data);
}

albumsEditDeleteView.php
(this is a view that gets loaded into the tab contentarea div)

<div id="adminTabsContent">
<div id="albumList">
<ul>
<li>
 <a href="#">Asdf</a>
 <a class="add" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/add_album/301/Asdf/1/28/0">[ add ]</a>
 <a class="delete" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/delete_album/301/Asdf/1/28/0">[ delete ]</a>
</li>
</ul>
</div>
</div>

$(document).ready(function(){   
$('#albumList').on({        
    click: function (evt){          
        evt.preventDefault();   
var $clickedElement = evt.target.tagName;
if ($clickedElement == 'A' ){                
    var urlarray = url.split('/');      
    $chosen.albumid     = urlarray[8];
    $chosen.albumname   = urlarray[9];
    $chosen.lft     = urlarray[10];
    $chosen.rgt     = urlarray[11];
    $chosen.nodeDepth   = urlarray[12]; 
           if ($class == 'add'){                  
     albumajaxcall($chosen);
       }
          if ($class == 'delete'){            
    deleteajaxcall($chosen);
       }            
    }               
}   
});
});


function albumajaxcall($data){
$.ajax({
    type: "POST",
    url: "index.php/Adminsite_Controller/add_album/",
    dataType: "json",
    data: $data,
    statusCode: {removed}
            },
    success: adminTabContent
}); 
}

function adminTabContent(data){         
$('#adminTabsContent').html(data);
}

//heres the view file that has to replace the original view inside 
//tabcontent area
//addnode_view.php
    <?php echo form_open('Albums_Controller/update_albumSet');?>                                
        <input type="text" name="newAlbum" id="newAlbum" value=""/>             
        <input type="submit" name="submit" value="Submit" />        
    <?php echo form_close();?>
    <?php 


//heres the controller function
function add_album(){           
    $levelData ['albumid']      = $this->input->post('albumid');
    <!-- removed-->

    $levelData ['main_content'] = 'addnode_view';   
    $this->load->view('includes/template', $levelData);
}


 //And heres the controller method that loads 
 //the original page (albumsEditDeleteView.php) - this is the original view 
 //that gets loaded into the tab- I get stuck when this view 
 //has to be **totally** replaced through links in the view)

function album_addDelete(){
    $allNodes ['myAlbumList'] = $this->Albums_Model->get_albumList();
    echo $this->load->view('albumsEditDelete_view', $allNodes); 
}

提前谢谢。

4

1 回答 1

0

基本上,您需要做的是加载您将在处理您的 ajax 的控制器功能(adminsite_controller/whatever 功能)的选项卡中放入的任何新视图。

这基本上会回显视图文件,该文件将被视为 ajax 函数的成功变量。

所以你有这样的东西然后你的ajax的成功部分

success:function(msg){adminTabContent(msg);}

在codeigniter的控制器中,您将以标准方式加载视图,但由于这将只加载页面的一部分,您可能需要创建一个新的视图文件,该文件就是那里的div。如果不是 ajax,您将按照相同的方式收集所有数据。

$data['some_data'] = $this->some_model->some_function();
$this->load->view('someview', $data);
于 2012-06-06T17:10:19.937 回答