0

我正在使用CodeIgniter 框架来构建一个 Web 应用程序,如下所示。

我的默认控制器是这样的,

class Start extends CI_Controller {
    public function index() 
    {  
        $view_data = array(
            'foo' => 'bar',
            'top_bar_view' => 'top_bar_view',
            'top_bar_params' => array(
                'param1' => 'val1',
                'param2' => 'val2',
                'param3' => 'val3', 
                'param4' => 'val4',
                'param5' =>  'val5'
            )
        );
        $this->load->view('main_view', $view_data);
    }
} 

它加载 main_view,这是一种母版页,我在其中加载我使用 $view_data 传递的视图文件。

然后,在这个 top_bar_view 上,我想调用一个控制器,以便根据一些数据构建一个菜单。现在,我在这个局部视图中使用 AJAX 调用来完成此操作。

script type="text/javascript">
    $(function() {
        $.post('index.php/menu/givemenu', {}, function(data) { 
             $('#topMenuBar').append(data); });
        });

<img alt="alt_data" src="assets/img/<?php echo $image_name; ?>" />
<div>
    <img alt="<?php echo $descricao_editora; ?>" src="assets/img/<?php echo $image_name; ?>" />
</div>
<div class="divSpacer20pxRight"></div>
<div class="divTituloProduto">
    <?php echo $titulo_produto; ?>
</div>
<div class="clear"></div>
<div id="topMenuBar" class="divTopMenuBar"></div>
<div class="clear"></div> 

这是否正确并尊重 MVC 框架?

4

2 回答 2

2

我个人不喜欢这种解决方案,但“它是否正确”是相对的,但我会创建一个MY_Controller从我所有其他控制器扩展的方法并添加该givemenu方法,以便我可以从所有控制器调用它。在您的控制器index方法上,您调用它并将其返回添加到您的数组并将其传递给视图。

于 2012-05-17T15:06:29.657 回答
1

有很多方法可以做到这一点。为什么不创建一个帮助程序或库来完成您的 givemenu 方法的工作?

或者使用像 Lex 这样的模板解析器?https://github.com/happyninjas/lex

如果您只包含一些内容,它将使您的控制器和视图更易于维护,并且意味着您不必依赖 JavaScript。

于 2012-05-17T15:57:33.997 回答