Nežádoucí reset persistentního parametru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jarek92
Člen | 91
+
0
-

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
+
0
-

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ě

Jarek92
Člen | 91
+
0
-

A link zřejmě nefunguje v JS že? :)

Pavel Kravčík
Člen | 1196
+
0
-

Proč by nefungoval, když se PHP generuje dříve, než JS? :)

<script>
	alert({link ahoj!});
</script>
jiri.pudil
Nette Blogger | 1032
+
0
-

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
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

@Jarek92 Ten odkaz si vygeneruj ke každý entitě (tam kde máš to různý id vygeneruj svůj odkaz) a do tý tvý funkce posílej jen ID prvku kterej updatuješ (nebo jinak manipuluješ).

Jarek92
Člen | 91
+
0
-

@CZechBoY Mohl bys to prosím více rozvést? :)

ViPEr*CZ*
Člen | 817
+
0
-

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.

Jarek92
Člen | 91
+
0
-

mám např. toto:

<input name="purchaseContract_sellerSide_chooseSellerSide_sideChooser" value="" id="purchaseContract_sellerSide_chooseSellerSide_sideChooser_0" onclick="loadForm(1,3);" type="radio">

přičemž atribut onclick=„loadForm(1,3);“ se načítá z DB.

Michal Hlávka
Člen | 190
+
+1
-
<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
+
0
-

Zkusil jsem, nicméně uvedený kód mi vegeneruje adresu:

http://domena.cz/contract/{link Contract:getform 3}

GEpic
Člen | 566
+
0
-

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