Nette - {link!}宏无法处理URL中已有的GET参数

时间:2013-12-19 14:55:26

标签: macros get nette

我在项目中使用Nette 2,并且还使用带有AJAX的.latte模板系统。

现在我有jquery函数(在模板中)应该在同一目标上生成GET请求,但它应该在它之后添加一些GET参数。

此目标最初使用一个GET参数呈现,然后执行一些操作,在其中一些操作中,AJAX从同一目标加载一些信息(只添加几个GET参数)。

现在我使用.latte {link!}宏生成AJAX URL(感叹号代表信号)。现在,这可以生成新的URL,并将GET参数附加到原始URL。 但附加内容已被严格解析,因为网址中只有&amp%3B而非&

我的模板中有这个代码:

{block content}
<h1 n:block=title>New Rule</h1>

{snippet rulesForm}
    {form newRuleForm}
        {$form}
        <script type="text/javascript">
            {foreach $form['rule']->containers as $i => $rule}
                {include #jsCallback, id => $i, input => $rule['table']->name, link => tableChange}
                {include #jsCallback, id => $i, input => $rule['column']->name, link => tableChange}
            {/foreach}
        </script>
    {/form}
{/snippet}
{/block}

{define #jsCallback}
$('#{$control["newRuleForm"]['rule'][$id][$input]->htmlId}').on('change', function(){
    alert('{$link}');
    $.nette.ajax({
        type: 'GET',
        url: '{link {$link}!}',
        data: {
            'value': $(this).val(),
        }
    });
});
{/define}

如何解决此问题,以便生成正确附加GET参数的链接?

感谢。

2 个答案:

答案 0 :(得分:1)

最好的方法是避免生成内联Javascript。您可以通过CSS类标记所有这些表单控件(例如special-input),然后您不必在Latte迭代中生成Javascript代码。

{snippet rulesForm}
    <div data-link-table="{link tableChange!}"></div>
    ...
{/snippet}
$('.special-input').on('change', function () {
    $.nette.ajax({
        type: 'GET',
        url: $('[data-link-table]').data('linkTable'),
        data: {
            value: $(this).val()
        }
    });
});

答案 1 :(得分:0)

也许是noescape修饰符?

$.nette.ajax({
    type: 'GET',
    url: '{link {$link|noescape}!}',
    data: {
        'value': $(this).val(),
    }
});