在我的JavaScript中(使用jQuery),我需要访问一整套PHP变量。虽然我只是将JavaScript文件作为视图生成,然后使用renderPartial()
来回显主视图中的JavaScript。
然而,这显然不是很优雅,所以我想知道'Yii'的做法。我一直在看Assets Manager,但这似乎是针对静态JavaScript文件 - 你不能在那里包含PHP(除非我错了)。
还有另一种方法吗?
答案 0 :(得分:2)
您可以考虑registerScript。在我看来,它更好,因为有一个名为$ position的参数,它可以帮助你控制render()的进程输出。
答案 1 :(得分:1)
方法之一是通过一个小脚本和redisterScript()设置全局变量,然后在真实的js中使用这个变量
答案 2 :(得分:1)
在key => value数组中设置变量并使用CJSON :: encode非常有效。您可以通过jQuery的parseJSON创建的对象访问所有变量。例如:
$myVarList = array(
'nameOne'=>$valueFromAnotherVar,
'nameTwo'=>$object->coolValue,
'nameThree'=>$cat->hoursSleptToday()
);
Yii::app()->clientScript->registerScript("myVarList",
'myVarList = jQuery.parseJSON('.CJSON::encode($myVarList).');'
然后,您可以访问全局变量
中的值myVarList.nameOne || myVarList.nameTwo || myVarList.nameThree
答案 3 :(得分:1)
参考Yii2 - Client Scripts Documentation,您可以使用registerJS函数将变量传递给javascipt。例如:
/* @var $this yii\web\View */
$this->registerJs(
"var calenderEvents = ".Json::encode($calenderEvents).";",
yii\web\View::POS_HEAD,
'calender-events-script'
);
答案 4 :(得分:0)
尝试这样做:
$ myVarList = array(
'名称一' = GT; $ valueFromAnotherVar,
' nameTwo' = GT; $对象 - > coolValue,
' nameThree' = GT; $ CAT-> hoursSleptToday()
);$ json = addslashes(CJSON :: encode($ myVarList));
Yii :: app() - > clientScript-> registerScript(" myVarList",' myVarList = jQuery.parseJSON("'。$ json。'");');