Передача переменных из контроллера в функцию JavaScript в Fat-Free Framework - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть некоторые значения на контроллере, которые я хочу передать в функцию 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 голосов
/ 21 июня 2019

Я стал немного ленивее этого.

У меня есть данные в файле словаря (F3). Я загружаю его в поле ввода внизу моей страницы и назначаю значение с помощью шаблонов. Я использую Jquery (можно использовать обычный JS) для получения значения.

Ex: Данные Dict

'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 ...

0 голосов
/ 12 ноября 2018

Зависит от содержимого, хранящегося внутри $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 не будет сообщать ни о какой синтаксической ошибке.

Техника 2bis:

Внедрить технику 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.

...