我打電話,生成一個按鈕一個Ajax功能:YII:Renderpartial不生成JavaScript?
$html = $this->renderPartial('/cart/_cartItem', array('data' => $data, ) , true);
問題是,如果我打印出$ HTML,我看到按鈕,但相關的JavaScript來使按鈕正常工作,不存在。有沒有辦法強制渲染,以包括必要的JavaScript,使這個按鈕的工作100%?
我打電話,生成一個按鈕一個Ajax功能:YII:Renderpartial不生成JavaScript?
$html = $this->renderPartial('/cart/_cartItem', array('data' => $data, ) , true);
問題是,如果我打印出$ HTML,我看到按鈕,但相關的JavaScript來使按鈕正常工作,不存在。有沒有辦法強制渲染,以包括必要的JavaScript,使這個按鈕的工作100%?
的document.ready我固定它做兩件事情:
首先,包括所有的JavaScript的過程$ outputTrigger設置真正;
$html = $this->renderPartial('/cart/_cartItem', array('data' => $data, ) , true, **true**);
其次,新增這也:
<link rel="stylesheet" type="text/css" href="/easionline2/www/assets/9bdc3248/css/bootstrap-yii.css" />
<script type="text/javascript" src="/easionline2/www/assets/1dffa579/jquery.js"></script>
<script type="text/javascript" src="/easionline2/www/assets/9bdc3248/js/bootstrap.js"></script>
我做了一個黑客擺脫這樣的:
$start = strpos($html, '<div class="cartItem');
$end = strlen($html) - $start;
$html = substr($html, $start , $end);
任何人都知道一個更好的方式做第二部分?
將JavaScript放在包含按鈕的頁面上(不要使用...),但對於ex;
Yii::app()->clientScript->registerScript('toggle', "
$('#clearDate').click(function() {
$('#Project_start_date').val('');
});
");
如果仍然劑量不會工作的嘗試,包括在JavaScript
這個問題已經得到解答,但這是相關的,可能會派上用場。
請注意在Yii中通過AJAX調用renerPartial()。這是一個已知的錯誤,Yii沒有正確說明AJAX引入的新視圖之外的javascript。如果您正在加載一個小部件,或者重新加載jQuery或另一個JS文件的東西,那麼在AJAX調用之前最初加載到頁面上的jQuery將被遺忘,並且它所做的所有代表也會被遺忘。這個JS代碼設置了所有的AJAX調用來去除任何JS腳本的新HTML,該JS腳本將加載已經加載的JS文件。把它放進你的主觀點:
<script>
$.ajaxSetup({
global: true,
dataFilter: function(data,type){
// only 'text' and 'html' dataType should be filtered
if (type && type != "html" && type != "text")
{
return data;
}
var selector = 'script[src]'; // copy-paste the following back in after [src] if you also want stylesheets blocked too: ,link[rel="stylesheet"]
// get loaded scripts from DOM the first time we execute.
if (!$._loadedScripts) {
$._loadedScripts = {};
$._dataHolder = $(document.createElement('div'));
var loadedScripts = $(document).find(selector);
//fetching scripts from the DOM
for (var i = 0, len = loadedScripts.length; i < len; i++)
{
$._loadedScripts[loadedScripts[i].src] = 1;
}
}
//$._dataHolder.html(data) does not work
$._dataHolder[0].innerHTML = data;
// iterate over new scripts and remove if source is already in DOM:
var incomingScripts = $($._dataHolder).find(selector);
for (var i = 0, len = incomingScripts.length; i < len; i++)
{
if ($._loadedScripts[incomingScripts[i].src])
{
$(incomingScripts[i]).remove();
}
else
{
$._loadedScripts[incomingScripts[i].src] = 1;
}
}
return $._dataHolder[0].innerHTML;
}
});
</script>
在你的局部視圖可以設置的jquery.js和bootstrap.js假的'scriptMap'值,見【答案】(http://stackoverflow.com/a/14476473/720508) – 2013-03-25 14:27:10
Yous不應該引用這樣的資產文件... – soju 2013-03-25 14:41:44