Я впервые пробовал MVC.Я использую Code Igniter для MVC вместе с jQuery и jQueryUI для внешнего интерфейса.У меня есть основная идея MVC, и у меня есть рабочий сайт.Концептуально, однако, я хочу убедиться, что я остаюсь максимально жестким в отношении идеи MVC.
У меня есть основной вид обложки, а затем используется load->view("skin", $contents)
, где $contents
- ассоциативный массив, содержащийдругие представления.
В результате у меня есть одна страница (называемая "консоль администратора"), на которой вызывается представление скина, а $content
содержит больше HTML.Я хочу, чтобы диалоговое окно jQueryUI использовалось только на этой странице.Чтобы создать это, у меня есть тег <script>
, который содержит диалоговое окно javascript в представлении консоли администратора.Это заканчивается тегом <script>
в середине набора HTML, который включает в себя, когда отображается последняя страница.
Конечным результатом этого является то, что я лениво загружаю JavaScript, но это может привести кнесколько вызовов jQuery $(document).ready(function(){...});
.
У меня все работает, но я не уверен, соответствует ли моя реализация принципам MVC.Лучше ли использовать метод, который я использую, в котором javascript загружается только тогда, когда он используется, или я должен положить javascript где-нибудь еще?Я делаю горы из холмов?
Мой соответствующий код контроллера:
function index(){
$tree = $this->mainModel->getUnitTreeMeta();
$treeOutput = $this->load->view('unit_tree', array('units' => $tree), TRUE);
$pages = $this->mainModel->getPages();
$console = $this->load->view('admin_console', array('units'=>$tree, 'pages'=>$pages), TRUE);
$content = array(
'title' => 'Admin Console',
'css' => link_tag(array('href' => 'css/admin.css', 'rel' => 'stylesheet', 'type' => 'text/css', 'media'=> 'screen'))."\n",
'navbar' => 'navbar',
'content' => $console,
'rightSidebar' => $treeOutput,
'footer' => ''
);
$this->load->view('skin', $content);
}
skin.php содержит строку <?=$content?>
, которая является HTML / JS, содержащимся впредставление admin_console:
<div>
<div>
...
<a href="" id="addUnit" class="smallLinks">Add a New Unit</a>
</div>
</div>
<!-- DIALOG BOXES -->
<div id="addUnitDialog" title="Add A New Unit">
<?php echo form_open('admin/add_unit'); ?>
Unit Name: <br />
<?php echo form_input("unitName", "");?>
<br />
Content: <br />
<?php echo form_textarea("content", "");?>
<?php echo form_close();?>
<div id="addUnitResponse"></div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$( "#addUnitDialog" ).dialog({
autoOpen: false,
minWidth: 680,
buttons: {
"add Unit" : function(){
var unitName = $("input", this).val();
var content = $("textarea", this).val();
$.ajax({
url : "add_unit",
type : "POST",
success :function(){
location.reload();
},
error : function(){
$("#addUnitResponse").text("error");
}
});
}
}
});
$("a#addUnit").click(function(){
$( "#addUnitDialog" ).dialog( "open" );
return false;
});
});
</script>