0

私の Web サイトの完全に機能する部分のコンテンツを含むいくつかのタブがあります。

たとえば、私の管理領域には、[アルバムの追加/削除] [写真の追加] [写真の削除] タブがあります。技術的には、管理領域をタブで分割しています。

これらのタブにコンテンツをロードするために ajax を使用しています。タブのコンテンツ領域は div です。

タブのコンテンツ領域内にあるビューも ajax を使用して読み込みます。これらは、タブのコンテンツ領域内で動作する ajax 呼び出しです。

タブのコンテンツ領域内のビューが同じままであるか、その一部のみが変更されている限り、すべてが正常に機能します。しかし、タブ コンテンツ エリア内の特定のインタラクションがまったく新しいビューを返す場合、タブ コンテンツ エリアはそれらを表示しません。

返されたこの新しいビューがタブ コンテンツ エリアの 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 に答える