在Fat-Free Framework中将变量从控制器传递给javascript函数

时间:2018-11-11 14:11:19

标签: javascript fat-free-framework

我在控制器上有一些要传递给视图页面中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>

2 个答案:

答案 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:

技术1:

将数据转换为JSON并将其转储到JS对象。

// controller.php (JSON encode)
$f3->set('data',json_encode($data));
<!-- template.html -->
<script>
  var data={{ @data | raw }};
</script>

优点:易于使用。

缺点:您的IDE将报告语法错误+对raw的额外调用。

技术2:

将数据转换为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之二:

将技术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

技术3:

将数据转换为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问题...