Nežádoucí reset persistentního parametru
- Jarek92
- Člen | 91
Zdravím,
mám presenter, ve kterém mám dva persistentní parametry. Nicméně při
jejich inicializaci v metodě actionNew se sice vše správně inituje, ovšem
při volání metody actionGetform (v šabloně new.latte z main.js) nemá ani
jeden z parametrů žádnou hodnotu. Viz kód.
class ContractPresenter extends BasePresenter {
/** @persistent */
public $contractTypeId;
/** @persistent */
public $contractPartTypeId ;
public function actionNew($ctId, $cptId) {
$this->contractTypeId = $ctId;
$this->contractPartTypeId = $cptId;
}
public function actionGetform($id) {
// zde už persistentní parametry mají hodontu null
$form = $this->formService->loadForm($id, $this->contractPartTypeId, $this->contractTypeId, null)->toHTML();
$this->sendResponse(new JsonResponse(["form" => $form]));
}
Může to být tím, že metodu volám ze souboru main.js? Díky za rady.
- jiri.pudil
- Nette Blogger | 1032
Záleží na tom, jak ji voláš .) ale obecně pokud ty parametry nejsou
v URL, vynulují se. Nette je předává automaticky, pokud odkaz vygeneruješ
přes něj (link
, n:href
), jinak si to musíš
zajistit ručně
- Pavel Kravčík
- Člen | 1196
Proč by nefungoval, když se PHP generuje dříve, než JS? :)
<script>
alert({link ahoj!});
</script>
- jiri.pudil
- Nette Blogger | 1032
V externím JS nefunguje, ale můžeš si ho do něj předat snadno třeba přes data-* atribut :) nástřel pro jQuery:
<a href="#" class="getform" data-url="{link getform}">Get form</a>
$('.getform').on('click', function () {
var url = $(this).data('url');
});
- Jarek92
- Člen | 91
Asi někde dělám chybu :(, ale nefunguje.
JS kód v main.js
function loadForm(pid, id) {
$.ajax({
type: "POST",
dataType: "json",
url: "{link Contract:getform " + id + "}",
success: function(data) {
$("#form_" + pid).nextAll(".form_level_1").remove();
var html = data["form"];
$(html).insertAfter("#form_" + pid);
initForm();
}
});
}
Editoval Jarek92 (15. 8. 2016 12:02)
- ViPEr*CZ*
- Člen | 817
Chtěl tím říci, že toto je špatně: url: „{link Contract:getform " +
id + "}“,
a mělo by tam třeba být:
url: $(id).data(‚url‘),
To id je parametr funkce loadForm a dostane se tam, někde kde tu funkci
voláte. Pravděpodobně se to zavolá při nějaké akci uživatele a tou
s největší pravděpodobností bude kliknutí do nějakého html
elementu.
Takže s největší pravděpodobností už máte jQeury objekt
představující daný element v nějaké click metodě.
Pak to ještě můžete třeba přepsat na:
url: item.data(‚url‘),
kde se id změnilo za item a v click metodě předáte $(this) jak je
popsáno výše.
- Michal Hlávka
- Člen | 190
<input name="purchaseContract_sellerSide_chooseSellerSide_sideChooser" value="" id="purchaseContract_sellerSide_chooseSellerSide_sideChooser_0" onclick="loadForm(1,3, '{link Contract:getform $id}');" type="radio">
function loadForm(pid, id, link) {
$.ajax({
type: "POST",
dataType: "json",
url: link,
success: function(data) {
$("#form_" + pid).nextAll(".form_level_1").remove();
var html = data["form"];
$(html).insertAfter("#form_" + pid);
initForm();
}
});
}
Editoval emptywall (15. 8. 2016 13:50)
- Jarek92
- Člen | 91
Zkusil jsem, nicméně uvedený kód mi vegeneruje adresu:
http://domena.cz/contract/{link Contract:getform 3}
- GEpic
- Člen | 566
Jarek92 napsal(a):
Zkusil jsem, nicméně uvedený kód mi vegeneruje adresu:
http://domena.cz/contract/{link Contract:getform 3}
Tak ho nedávej do uvozovek