TYPO3 extbase – 流体变量到jquery
怎样才能将流体变量从控制器传递给jQuery或JavaScript?
我的控制器里面:
public function tabs () { $this->view->assign('tab', 1); }
内部流体我将变量用作{tab}但是如何传递给JavaScript? 任何帮助,将不胜感激…
流体模板行为中的JS在大多数情况下都很糟糕,如果您的JS代码包含任何花括号,则需要包含外部脚本,而不是将脚本放在视图中。
原因是Fluid认为所有花括号都属于它的范围,所以当你写:
$('#mySelectBox').change(function() { // functions body code // next line // next line });
Fluid破坏JS并将其渲染为:
$('#mySelectBox').change(function() Array);
然后我经常使用这样的东西:
在视图中:
在script.js中:
$("#container").val(TxMyExtKeyTabNumber);
如果您需要像f:这样的流体标签,因为您可以使用CDATA(流体变量也可以工作)。 例如
编写起来并不是很舒服,但它有效并且您拥有Fluid逻辑的优势。
我通常使用data-Attributes。 所以在Fluid你有这样的东西:
在JavaScript中,您可以访问以下属性:
jQuery('div').data('tab');
当然,您可以使用任何HTML元素。
不好(但也不比CDATA的东西更难看)但它可以直接在javaScript中使用标记符号流体。 在{}括号外,您当然可以直接访问流体变量。 在括号内,您可以使用任何流体标签包裹流体变量。
所以下面的所有例子都有用……
我做了类似的事情,对于值,只需添加{settings.mySettingName}
TypoScript变量或您拥有的任何数据
function getHiddenSettings(className) { var settings = {}; $.each($(className), function (index, input) { if (input.dataset.type === "integer") { settings[input.name] = parseInt(input.value) || 0; } else if (input.dataset.type === "boolean") { settings[input.name] = !!(parseInt(input.value) || input.value === "true") } else if (input.dataset.type === "string") { settings[input.name] = input.value; } }); return settings; } var settings = getHiddenSettings(".mySettings"); $('pre').html(JSON.stringify(settings, null, 2));