Nette - 片段更新
Nette - snippet update
我在更新片段时遇到问题。更改 select 框中的 selection 后,我在另一个 select 框中重绘了选项的内容,但代码片段没有更新。
拿铁咖啡:
<form class="df-checkout">
...
<select n:href="getHraci!" name="domaci" id="domaci" class="form-control">
<option value="">Vybrat</option>
<option n:foreach="$tymy as $tym" value="{$tym->getId()}">
{$tym->getNazev()}
</option>
</select>
...
<div class="row helpers hidden">
<select n:snippet="hraciDomaci" class="form-goly-domaci-select form-control">
<option></option>
<option n:foreach="$hraciDomaci as $hrac" value="{$hrac->getId()}">
{$hrac->getPrijmeni()} {$hrac->getJmeno()}
</option>
</select>
<input type="text" class="form-goly-input form-control">
</div>
JS文件:
$(document).ready(function(){
$("#domaci").bind('change', function() {
var link = $(this).attr("href");
$.nette.ajax ({
url: link,
data: {"strana": "domaci", "tymId": $(this).val()},
type: 'get',
dataType:'json'
});
});
});
控制器:
public function handleGetHraci($strana, $tymId)
{
$tym = $this->tymManager->getTymRepository()->find($tymId);
$muzstvo = $this->tymManager->getMuzstvoRepository()->findBy(["nazev" => self::HLAVNI_TYM]);
$hraci = $this->hracManager->getHracRepository()
->findBy(["tym" => $tym, "muzstvo" => $muzstvo], ["prijmeni" => "ASC", "jmeno" => "ASC"]);
if($this->isAjax()){
$this->template->hraciDomaci = $hraci;
$this->redrawControl('hraciDomaci');
}
}
表单尚未创建和处理,所以我做的第一个 select 框是临时的,带有代码段的 select 框独立于表单。我用它来复印。
JS 正确调用处理程序,如果我在 redrawControl 之前转储 $this->template->hraciDomaci 数据就在那里,但是 redrawControl 不会做任何事情。但是在页面下方的 Tracy 栏中添加了一个带有该过程的新行。
我的调试器中没有错误,进程状态为 200,但响应仅包含:
{"state":[],"snippets":{"snippet--hraciDomaci":"\t\t\t\t\t\t\t\t\t\t<option></option>\n"}}
我尝试使用 $.get 而不是 $.nette.ajax,换行 在 snippetArea 中,我通常在 {block content}
中有此代码,因此不需要 snippetArea。 nette.ajax.js 有初始化 $.nette.init();
我也有。
非常感谢任何建议。
检查您是否没有在演示者
的render*
方法(例如renderDefault
)中重写hraciDomaci
变量
我在更新片段时遇到问题。更改 select 框中的 selection 后,我在另一个 select 框中重绘了选项的内容,但代码片段没有更新。
拿铁咖啡:
<form class="df-checkout">
...
<select n:href="getHraci!" name="domaci" id="domaci" class="form-control">
<option value="">Vybrat</option>
<option n:foreach="$tymy as $tym" value="{$tym->getId()}">
{$tym->getNazev()}
</option>
</select>
...
<div class="row helpers hidden">
<select n:snippet="hraciDomaci" class="form-goly-domaci-select form-control">
<option></option>
<option n:foreach="$hraciDomaci as $hrac" value="{$hrac->getId()}">
{$hrac->getPrijmeni()} {$hrac->getJmeno()}
</option>
</select>
<input type="text" class="form-goly-input form-control">
</div>
JS文件:
$(document).ready(function(){
$("#domaci").bind('change', function() {
var link = $(this).attr("href");
$.nette.ajax ({
url: link,
data: {"strana": "domaci", "tymId": $(this).val()},
type: 'get',
dataType:'json'
});
});
});
控制器:
public function handleGetHraci($strana, $tymId)
{
$tym = $this->tymManager->getTymRepository()->find($tymId);
$muzstvo = $this->tymManager->getMuzstvoRepository()->findBy(["nazev" => self::HLAVNI_TYM]);
$hraci = $this->hracManager->getHracRepository()
->findBy(["tym" => $tym, "muzstvo" => $muzstvo], ["prijmeni" => "ASC", "jmeno" => "ASC"]);
if($this->isAjax()){
$this->template->hraciDomaci = $hraci;
$this->redrawControl('hraciDomaci');
}
}
表单尚未创建和处理,所以我做的第一个 select 框是临时的,带有代码段的 select 框独立于表单。我用它来复印。 JS 正确调用处理程序,如果我在 redrawControl 之前转储 $this->template->hraciDomaci 数据就在那里,但是 redrawControl 不会做任何事情。但是在页面下方的 Tracy 栏中添加了一个带有该过程的新行。 我的调试器中没有错误,进程状态为 200,但响应仅包含:
{"state":[],"snippets":{"snippet--hraciDomaci":"\t\t\t\t\t\t\t\t\t\t<option></option>\n"}}
我尝试使用 $.get 而不是 $.nette.ajax,换行 在 snippetArea 中,我通常在 {block content}
中有此代码,因此不需要 snippetArea。 nette.ajax.js 有初始化 $.nette.init();
我也有。
非常感谢任何建议。
检查您是否没有在演示者
的render*
方法(例如renderDefault
)中重写hraciDomaci
变量