我使用的模板代码如下:
{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
。请帮我解决。
答案 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()});
});
应该是这样。希望您觉得这有用