我正在尝试通过使用jQuery get从控制器回显视图部分来单击选项卡时动态添加内容,数据返回正常但我在该部分中做出的任何headScript()
声明都不是在页眉中设置,在此视图中调用的其他部分中的声明 DO 使appendFile操作成功。我假设这是因为在页面加载时发生了一些preDispatch,它通过部分并将headScript项追加到当我从ajax get动态加载部分代码时没有发生的标题:
$.ajax({
url: sourceUrl,
method: 'get',
beforeSend: function(){
$('a[href="'+href+'"]').addClass('load').tab('show');
},
success: function(data){
console.log(data);
$("#"+tabID+"-content").html(data);
$('a[href="'+href+'"]').removeClass('load');
},
error: function(data){
$("#"+tabID+"-content").html('There was an issue loading the tab. Please try again.');
$('a[href="'+href+'"]').removeClass('load');
}
});
这会调用没有布局的动作,只是回显部分:
$this->_helper->_layout->disableLayout();
echo $this->view->partial('device/pool-graph.phtml',
array('id' => $id));
任何<?php $this->headScript()->appendFile(); ?>
操作似乎都没有将javascript附加到标题中,除了在部分中包含基本的<script src='/js/script.js'>
标记之外,还有其他方法吗?我宁愿不这样做。
答案 0 :(得分:1)
头部脚本帮助程序中没有涉及preDispatch,只需要对帮助程序进行“排队”脚本标记,然后通过您可能在布局中使用的<?=$this->headScript()?>
之类的回显调用输出。由于您的控制器操作正在禁用布局,因此此调用永远不会发生。
您说您不想在部分输出脚本标记,但这是解决问题的最简单方法。如果你想避免这种情况,因为你正在使用应用程序中的其他部分,那么稍微麻烦的解决方案可能是在你的部分之后使用帮助器输出脚本标记:
$this->_helper->_layout->disableLayout();
echo $this->view->partial('device/pool-graph.phtml',
array('id' => $id));
echo $this->view->headScript();