我在控制器上有一些要传递给视图页面中javascript函数的值。
在控制器中,我有:
$f3->set('value', $value);
我可以使用 {{@ value}} 访问视图上的值,但是如何在视图页面的javascript函数中使用(访问)该值?
<script type="text/javascript">
var value = XXX; //XXX in the {{@value}}, how do i access it in here???
</script>
答案 0 :(得分:2)
这取决于存储在$value
中的内容。
如果这是一个基本字符串,其中没有单引号或双引号,那么以下代码将起作用:
<script>
var value='{{ @value }}';
</script>
如果是整数,则以下代码将起作用:
<script>
var value={{ @value }};
</script>
...,尽管您的IDE可能会报告语法错误。
如果是浮点型,则以下代码将起作用:
<script>
var value={{ str_replace(',', '.', @value) }};
</script>
...,您的IDE也可能会报告语法错误。注意:str_replace
适用于将小数点分隔符设置为逗号的非英语语言环境。
对于其余所有内容(包括引号或数组的字符串),应使用以下一种技术将数据转换为JSON:
将数据转换为JSON并将其转储到JS对象。
// controller.php (JSON encode)
$f3->set('data',json_encode($data));
<!-- template.html -->
<script>
var data={{ @data | raw }};
</script>
优点:易于使用。
缺点:您的IDE将报告语法错误+对raw
的额外调用。
将数据转换为JSON,将其转储为JS字符串并进行解析。
// controller.php (JSON encode + escape double quotes)
$f3->set('data',str_replace('\\u0022','\\\\u0022',
json_encode($data,JSON_HEX_APOS|JSON_HEX_QUOT)));
<!-- template.html -->
<script>
var data=JSON.parse('{{ @data | raw }}');
</script>
缺点:不太容易使用+额外致电raw
。
优点:您的IDE将不会报告任何语法错误。
将技术2嵌入F3模板过滤器中。
// index.php
$tpl=Template::instance();
$tpl->filter('safejson',function($data){
$raw=\View::instance()->raw($data);
return str_replace('\\u0022','\\\\u0022',
json_encode($raw,JSON_HEX_APOS|JSON_HEX_QUOT));
});
<!-- template.html -->
<script>
var data=JSON.parse('{{ @data | safejson }}');
</script>
优点:易于使用+您的IDE将不会报告任何语法错误。
缺点:额外致电raw
。
将数据转换为JSON并将其嵌入DOM data-
属性中。
// controller.php (JSON encode)
$f3->set('data',json_encode($data));
<!-- template.html -->
<div id="foo" data-json="{{ @data }}"></div>
<script>
var data=JSON.parse(document.getElementById('foo').dataset.json);
</script>
优点:易于使用+您的IDE将不会报告任何语法错误+无需额外调用raw
。
答案 1 :(得分:0)
我比这更懒。
我的数据存储在词典文件(F3)中。我将其加载到页面底部的输入字段中,并通过模板分配值。我使用Jquery(可以使用普通的JS)来检索值。
例如: 字典数据
'prf_conf'=>' Update your profile'
在我的 profile.html
中 `< input type = 'hidden' id ='prf_conf' value='{{@prf_conf}}' >`
//this loads data in whatever language on my page
JS
Confirm button text: (i used jquery-confirm.min.js in this example)
$.confirm({ title: $('#prf_conf').value()
…有点体操但效果很好。没有IDE问题...