invalidace formulare

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

# PHP 5.2.10–2ubuntu6.3, Nette Framework 0.9.3-dev

mam problem s prekreslenim formulare pomoci AJAXu

template:

@{block #content}
    {snippet}
    <div id="projectBox">
          {control projectForm}
    </div>
    {/snippet}

a handlerer:

public function handleFetchCategories($id) {
    $form = $this->getComponent('projectForm');
    $form['select_box']->setItems(Model::fetchCategories($id));
    $this->invalidateControl();
    echo $form;
    $this->terminate();
}

ve firebugu se mi zobrazi spravna odezva, ale formular se neprekresli. nevite v cem je problem?

Ondřej Mirtes
Člen | 1536
+
0
-

Ukaž podobu té odezvy (JSON) z Firebugu.
Zkoušels nedělat to přes echo $form a terminate(), ale prostě nechat proběhnout celý cyklus Presenteru?

deric
Člen | 93
+
0
-

používám následující js:

function loadDefaultCategory(id)
{
            $.post("?do=fetchCategories", {"cat_id": id}, function(data) {
                    $('#projectForm').parent().html(data);
            });
}

zrušil jsem echo a terminate a odezva je:

{"state":{"ida":null},"snippets":{"snippet--frmProject":"<form action=\"\/admin.project\/edit\/?do=projectForm-submit\" method=\"post\" id=\"projectForm\" name=\"frm-projectForm\">\n\n<table>\n<tr>\n\t<th><label onclick=\"return false\" for=\"frmprojectForm-typ_akce_id\">Typ akce<\/label><\/th>\n\n\t<td><select onfocus=\"this.onmousewheel=function(){return false}\" onchange=\"loadDefaultCategory(this.value);\" name=\"typ_akce_id\" id=\"frmprojectForm-typ_akce_id\"><option value=\"1\">foo<\/option><option value=\"2\">letn\u00ed kurz<\/option><option value=\"3\" selected=\"selected\">zimn\u00ed kurz<\/option><\/select><\/td>\n<\/tr>\n\n<tr>\n\t<th><label onclick=\"return false\" for=\"frmprojectForm-vychozi_kategorie_ucastnika_id\">V\u00fdchoz\u00ed kategorie \u00fa\u010dastn\u00edka<\/label><\/th>\n\n\t<td><select onfocus=\"this.onmousewheel=function(){return false}\" name=\"vychozi_kategorie_ucastnika_id\" id=\"frmprojectForm-vychozi_kategorie_ucastnika_id\"><option value=\"10\">student<\/option><option value=\"11\">pracuj\u00edc\u00ed<\/option><\/select><\/td>\n<\/tr>\n\n<tr>\n\t<th>&nbsp;<\/th>\n\n\t<td><input type=\"submit\" class=\"button\" name=\"save\" id=\"frmprojectForm-save\" value=\"P\u0159idat\" \/><\/td>\n<\/tr>\n<\/table>\n\n<\/form>\n\n"}}

v js mám:

<script type="text/javascript" src="/js/jquery/jquery.js"></script>
<script type="text/javascript" src="/js/jquery/jquery.nette.js"></script>

a jquery.nette.js je verze z githubu z příkladu fifteen

deric
Člen | 93
+
0
-

upravil jsem to trochu, teď se předává pouze nahraný element, ale hlásí mi to chybu:

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: /js/jquery/jquery.js :: anonymous :: line 957" data: no]

nevíte v čem může být problém?

Editoval deric (18. 12. 2009 17:40)

deric
Člen | 93
+
0
-

nefunguje mi toto:

var elem = $('#frm-selbox_id');

naopak toto je v pořádku:

var elem = document.getElementById('frm-selbox_id');

moc neovládám jQuery, můžete mi vysvětlit rozdíl?

používám místo výše uvedeného kódu:

var elem = document.getElementById(id).parentNode.innerHTML = data;

a to funguje

Editoval deric (19. 12. 2009 15:49)

Filip Procházka
Moderator | 4668
+
0
-

tohle musí fungovat

var elm = $('#frm-selbox_id');

pokud ne tak si stáhni nejnovější jQuery

deric
Člen | 93
+
0
-

používám jQuery v1.3.2.

fungovalo mi to jenom ve firefoxu, tak jsem to ještě upravil:

$.getJSON("?do=categories",{"cat_id": id}, function(j){
         var options = '';
         for (var i = 0; i < j.length; i++) {
           options += '<option value="' + j[i].id + '">' + j[i].name + '</option>';
         }
         $("select#frm-selbox_id").html(options);
       });

a presenter generuje JSON odpověď