我正在尝试使用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 }})
});
答案 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
时,您可以通过json
(echo json_encode(You array here);
)