更新函数内的twig var

时间:2015-12-07 10:37:46

标签: javascript twig

我正在尝试使用twig和javascript。我只是想定义一个var并更新click函数中的值。不幸的是,var似乎已更新,但是当函数范围结束时,新值不会更新,因此控制台日志第一次写入1,每次进入click函数时写入2。 这是更好的方法吗?提前致谢

        {% set actual_index = 0 %}
        {% set num_elements = 3 %}

        addNewEvents();
        {% set actual_index = actual_index + 1 %}
        console.log({{ actual_index }})

        $("#load").click(function () { 
            addNewEvents();
            {% set actual_index = actual_index + 1 %}
            console.log({{ actual_index }})
        });

1 个答案:

答案 0 :(得分:1)

如何干净利落地做?从您的JavaScript中分离twig。它们不打算一起使用(即使它可以工作)。

您有多种不同的方法来检索js的信息。使用twig并将信息存储在隐藏的输入中,或通过AJAX调用获取信息。

例如:

var actual_index = -1;
var num_elements = 0;

$.getJSON('ur_here', function(data){
  actual_index = data.actual_index;
  num_elements = data.num_elements;
});

但它似乎远不止于此,您了解twig会生成HTML服务器端并将其发送给客户端吗? 只发生一次。

这意味着您 设置 的变量只存在于服务器端吗?这意味着当你执行{{ actual_index }}时,它只会生成一个客户端而不是变量。

    {% set actual_index = 0 %}
    {% set num_elements = 3 %}

在twig生成HTML并将其发送到客户端之前,上述两个变量存在于服务器端。

以下是你的js应该没有树枝的样子:

var actual_index = 0;
var num_elements = 3;

addNewEvents();
actual_index = actual_index + 1;
console.log(actual_index)

$("#load").click(function () { 
    addNewEvents();
    actual_index = actual_index + 1;
    console.log(actual_index);
});

修改

回答你的评论。

"{{ asset( path('event_values', { 'programmerid': programmerid, 'actual_index': actual_index, 'num_elements':num_elements } ))|raw }}

如果上面生成了一个网址,那么您就是在正确的路径上(否则请查看此帖子How Generating URLs from a template correctly in Symfony2/Twig)。

现在,getJSON的第一个参数是一个URL,第二个参数是回调。

请记住,您的{{asset ...}}应该生成一个可以在客户端调用的URL。

因此,在您的twig生成HTML后,URL应如下所示:

$.getJSON('http//:localhost/path/to/your/ajaxHandler.php', function(data){
  //this is called when you return data from your ajaxHandler.php
  //do something with data
});

这样,当您点击ajaxHanlder.php时,您可以通过jsonecho json_encode(You array here);

重新发回信息