0

我使用的模板代码如下:

{snippetArea wrapper}
    {control addFormControl}
{/snippetArea}

并且在addFormControl组件代码中是这样的:

{snippet clientSnippet}
...... 
{/snippet}

我正在将 ajax 与方法演示者方法一起使用:

public function handleClientChange(){
        $this['addFormControl']['addForm']['consignment_client']->setValue("test");

        $this->redrawControl('wrapper');
        $this->redrawControl('clientSnippet');
    }

但它不是重绘代码片段 id 是snippet-addFormControl-clientSnippet. 请帮我修复它。

4

2 回答 2

0

我不认为你可以调用 $this->redrawControl('clientSnippet'); 在演示者中并期望重绘组件。您应该在组件中调用它。

类似 $this['addFormControl']->redrawControl('clientSnippet');

于 2018-06-08T07:44:49.730 回答
0

这就是你可以做到的。在我最新的项目中,我正在做一些非常相似的事情,这很简单。对于 Nette,我使用这个 Ajax:https ://github.com/vojtech-dobes/nette.ajax.js

.latte 文件:

<input type="text" id="search-car" data-url="{plink refreshCars!}">

{snippet carlist}
{foreach $cars as $car}
   {var $photo = $car->related('image')->fetch()}
   {if $photo}
     <img src="{plink Image:image $photo->filename}"/>
   {/if}
 </a>
{/foreach}
{/snippet}

注意“!” 在文本输入的末尾。它告诉 Nette 照顾句柄函数。

主持人:

public function handleRefreshCars()
{
    $this->redrawControl('carlist');
}

public function renderDefault($foo = null)
{
    if ($foo === null || $foo === '') {
        $this->template->cars = array();
    } else {
        $this->template->cars = $this->carDao->getFiltered($foo);
    }
}

和 JS:

function callFilterAjax(url, data) {
        $.nette.ajax({
        url: url,
        data: data
     });
 }

$("#search-contract-car").on('load focus focusout change paste keyup', function () {
    callFilterAjax($(this).data('url'), {"foo": $(this).val()});
});

这应该是它。希望这个对你有帮助

于 2019-03-08T14:40:30.403 回答