我有一些javascript被包含在视图中,我在这个帖子中使用了inkedmn的方法: adding-page-specific-javascript-to-each-view-in-cakephp
所以我现在在我看来有以下代码:
$this->set('jsIncludes',array('google')); // this will link to /js/google.js
但是我需要将一些值从视图传递到javascript文件中,我不确定如何实现这一点。
更新:我想一个选项是回显php文件中的值,用div标签括起来,然后在javascript代码中使用getElementById()。
答案 0 :(得分:9)
你应该能够注入一个< script>使用您想要的数据直接标记到HTML中:
<script type="text/javascript">
var mynum = <?php echo intval($num); ?>;
var mystring = "<?php echo addslashes($string); ?>";
var myarray = <?php echo json_encode(array("one" => 1, "two" => 2)); ?>;
</script>
其他地方的任何javascript都应该能够使用这些变量。
注意:如果使用此数据的代码在页面中较早运行,他们显然不会看到这些变量。如果是这种情况,要么确保首先加载数据,要么可以使用setTimeout()或document.onready事件延迟代码运行直到页面完全加载。
答案 1 :(得分:1)
你有一些自动运行的代码吗?您可以将其包装在函数中,并将函数传递给必要的参数。
例如,我们现在在my-script.js
中有以下代码:
window.onload = function() {
alert('My favorite fruits are apples, and my favorite color is red.');
}
将其包裹在这样的函数中:
function initialize(args) {
window.onload = function() {
alert('My favorite fruits are ' + args.fruit +
', and my favorite color is ' + args.color + '.');
}
}
然后,在加载<script>
后使用PHP输出my-script.js
元素,并调用该函数。这是一个示例输出:
<script>
initialize({fruit: 'apples', color: 'red'});
</script>
答案 2 :(得分:0)
$this->Js->set('varname',$value);
来自js文件
var myvar = window.app.varname;
答案 3 :(得分:0)
这些是以下步骤:
1)在AppController.php
中包含js助手public $helpers = array('Js');
2)现在在ctp文件中声明js变量 就像那样:
$state = 'rajasthan';
$this->Js->set('state_name',$state);
echo $this->Js->writeBuffer(array('onDomReady' => false));
3)现在在js文件中使用这个js vairable“state_name” 就像那样:
console.log(window.app.state_name);
var state = window.app.state_name;