TYPO3 extbase - 流体变量的jQuery(TYPO3 extbase - fluid

2019-09-16 14:56发布

一个人怎么能传递从控制器到的jQuery或JavaScript流体变量?

在我的控制器:

public function tabs () {
    $this->view->assign('tab', 1);
}

内部流体我会使用变量{标签}但我怎么能传递给JavaScript? 任何帮助,将不胜感激...

Answer 1:

在流体模板行为JS是...在大多数情况下可怕的,如果你的JS代码包含您需要包括外部脚本,而不是把脚本视图中的任何大括号。

其原因是流体认为,所有的花括号属于它的范围,所以当你写:

$('#mySelectBox').change(function() {
    // functions body code
    // next line
    // next line
});

流体破坏JS并呈现它只是:

$('#mySelectBox').change(function() Array);

然后最常我用是这样的:

在视图:

<script>var TxMyExtKeyTabNumber = {tab}</script>
<script src="path/to/static/script.js"></script>

在的script.js:

$("#container").val(TxMyExtKeyTabNumber);


Answer 2:

如果您需要液标签,如F:你可以使用CDATA(流体变量也工作)。 例如

    <script type="text/javascript"><![CDATA[
            function initialize() {
                    var marker = [];
                    var LatLng;
                    var queryLatlng = new google.maps.LatLng(]]>{queryLat}, {queryLng}<![CDATA[);
                    var mapOptions = {
                            center: queryLatlng,
                            zoom: 8,
                            mapTypeId: google.maps.MapTypeId.ROADMAP
                    };
                    var map = new google.maps.Map(document.getElementById("tx_gmapplus-map"),mapOptions);

                    marker['0'] = new google.maps.Marker({
                            position: queryLatlng,
                            map: map,
                            title: "Standort"
                    });
                    ]]><f:for each="{addresses}" as="address" iteration="it"><![CDATA[
                            latlng = new google.maps.LatLng(]]>{address.txGmapplusLatitude}, {address.txGmapplusLongitude}<![CDATA[);
                            ]]>marker['{it.cycle}']<![CDATA[ = new google.maps.Marker({
                                    position: latlng,
                                    map: map,
                                    title: ]]>"{address.name}"<![CDATA[
                            });
                            ]]></f:for><![CDATA[
            }
]]></script>

不是真的很舒服写的,但它是工作,你有流体逻辑的优势。



Answer 3:

我通常使用的数据属性这一点。 因此,在流体你有这样的事情:

<div data-tab="{tab}"></div>

在JavaScript访问这个属性有:

jQuery('div').data('tab');

当然,你可以使用任何的HTML元素这一点。



Answer 4:

不是很好(但也不会更丑那么CDATA的东西),但它可以直接在JavaScript中使用标签标记液。 外括号{}当然你也可以直接访问流体变量。 括号内你可以用任何流体包裹标签流体变量。

因此,所有下面的例子将工作...

<script>
   var myGlobal = {fluidVar};
   function myFunc(){
      var myLocal = <f:format.raw>{fluidVar2}</f:format.raw>
      var myLocal2 = <f:if condition="1">{fluidVar3}</f:if>
   }
</script>


Answer 5:

我做了这样的事情,和值只需添加{settings.mySettingName} Typo脚本变量或任何数据,您有

 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)); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="hidden" class="mySettings" name="closedTimes" value="0" data-type="integer"> <input type="hidden" class="mySettings" name="onlyEmail" value="false" data-type="boolean"> <input type="hidden" class="mySettings" name="serverError" value="Server problem" data-type="string"> <pre></pre> 



文章来源: TYPO3 extbase - fluid variable to jquery