繁体   English   中英

从json数组设置twig变量

[英]set twig variable from json array

由于twig在任何javascript之前呈现,我遇到了一个小问题。

我需要在我从JSON数组接收的twig中设置一个变量,但是我遇到了一些问题,我觉得这应该很简单。

数据通过json数组通过symfony输入twig,并根据数组中的一个元素呈现不同的消息; 这部分没有问题。

我能够将输出打印到twig文件; 工作正常。 问题是我很难将其设置为树枝变量,以便我可以在几个地方使用它。

这很好用:

$('.id').html(items[0].id);

并正确打印到树枝上:

<div class="id"></div>

我试着这样做:

{% set requestid = '<div class="id"></div>' %}
{{ requestid }}

但正如预期的那样,这只会使HTML没有价值。

我一直试图做这样的事情:

在树枝上我有这个:

{% set requestid = "request_holder" %}
{{ requestid }}

在jquery我有这样的事情:

var reqid = items[0].id;
reqid.replace("request_holder",reqid);

我也尝试过这样的事情

var request_id = items[0].id;
window.location = request_id.replace("request_holder",request_id)

我觉得我错过了一小块。

**编辑清晰**

JQuery数组正在解析JSON数组。

我有items[0].id的值

在这里进一步编辑 - 清楚地表明我感到困惑:清理一点以免将未来的读者送到错误的道路上

我相信[d]变量需要在javascript中分配,因为twig是php,它是在javascript之前生成的。

我一直试图在javascript中生成树枝无济于事。

这是我一直在尝试的:

var requestitem = items[0].id;
$('.id').html("{% set requestId = " + requestitem + " %} <br/> {{ requestId }}");

这将requestId定义为字符串,并且只将+ requestitem +返回到页面上。

当我尝试这个(没有引号)

var requestitem = items[0].id;
$('.id').html("{% set requestId = requestitem %} <br/> {{ requestId }}");

树枝根本不识别requestitem项目

我试图引用小枝括号(例如"{" + "%"等),但这当然只将它们打印到页面上而不解释它们。

服务器端的Twig进程。 它需要变量并将它们呈现为HTML和文本。 浏览器中显示的内容只是HTML / text /和Javascript。 所以你的set requestid = "request_holder"{{ requestid}}只是在他们到达浏览器之前就转向了文本。

之后,您可以在前端使用Javascript可以与之交互的HTML和文本。 如果您需要在前端更改此ID,则需要在Javascript中完成。

你用id做什么?

感谢ASOlivieri的暗示,我能够意识到我做错了什么。 我把它放在这里以防万一有人碰到这个。 我只是在寻找一种方法来创建一个变量并使其可重复使用(我没有详细介绍,因为这似乎是无关紧要的)。

数据仅在JSON数组中可用,因此任何将其写入twig文件的尝试都会失败,因为它已经转换为HTML,所以我不得不找到另一个解决方案,

我能够像以前一样将变量保存在javascript中

var request_item = items[0].id;

由于我最初的目标是获得通过php更新应用程序的价值,我只需要在AJAX调用中使用此变量,并将其传递到我想要在twig中使用的路径。 这是一个简短的总结:

$('#mark-received').click(function()
   {
      var requestURL = "{{ path('my_path') }}";
      jQuery.ajax({
          url: requestURL,
          type: 'GET',
          data: {'id' : request_item},
          success: function success(data, text, xhr){
              $('#mark-received').addClass('hidden');
              $('#received-canceled').removeClass('hidden');
              $('header > .alerts').append( $('<div>Success Message</div>').addClass('alert alert-success'));
          },
          error: function error( xhr, status, err){
             $('header > .alerts').append( $('<div>There is a problem. <div class="close">x</div></div>', err).addClass('alert alert-danger'));
           }
       })
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM