我想访问nette框架中的组件片段

时间:2018-03-30 09:41:13

标签: ajax nette

我使用的模板代码如下:

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

addFormControl组件代码如下:

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

我正在使用ajax with method presenter方法:

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

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

但不是重绘代码段代码段snippet-addFormControl-clientSnippet。请帮我解决。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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照顾handle函数。

演示者:

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()});
});

应该是这样。希望您觉得这有用