1

Temat: $ajax->observeField i błąd form is not defined

Witam. Zaczynam przygodę z cake i trafiłem na rzecz z którą nie mogę sobie poradzić.

Tworzę formularz (w widoku):

<?php echo $form->create('Question');?>

Umieszczam w nim dwa pola, które mają być od siebie zależne (tzn. pole chapter_id od course_id).

echo $form->input('Chapter.course_id');
echo $form->input('Question.chapter_id');
echo $ajax->observeField('Chapter.course_id', array('url' => '/questions/update_select','update' => 'Question.chapter_id'));

W efekcie firebug rzuca mi takim błędem:

Form is not defined
add()()
new Form.Element.EventObserver('course_id', function(element, value) {new Ajax.Updater('Question.chapter_id','/questions/update_select', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize('course_id'), requestHeaders:['X-Update', 'Question.chapter_id']})})
40//]]>

Ktoś ma pomysł o co chodzi?

2

Odp: $ajax->observeField i błąd form is not defined

1.  "update" => powinien wskazywac na id elementu w ktory ma byc zaladowana odpowiedz ajaxa , w 99% przyadkow jest to div, a nie input, byc moze to powoduje blad (pozatym, update elementow innych niz DIV niekoniecznie musi dzialac pod przeladarkami innymi niz  FF).

2.  Zamiast 'Chapter.course_id' wstaw id pola ktore obserwujesz, a nie Model.pole


http://api.cakephp.org/class/ajax-helpe … serveField

Ostatnio edytowany przez robal77 (2009-04-22 23:46:35)

3

Odp: $ajax->observeField i błąd form is not defined

Na początek wystarczy, żeby ten kod działał pod ff.

Rzeczywiście, nie doczytałem dokumentacji odnośnie tego, że w observeField trzeba użyć id. Zamieniłem odpowidenie pola, tak że nazwy id są już odpowiednie, Błąd nadal występuje.

Form is not defined
new Form.Element.Observer('ChapterCourseId', 1, function(element, value) {new Ajax.Updater('QuestionChapterId','/questions/update_select', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize('ChapterCourseId'), requestHeaders:['X-Update', 'QuestionChapterId']})})
40//]]>

Tak się zastaawiam, czy do wykonania tego potrzebuję prototype + scriptaculous? Czy samo prototype wystarczy?

Ostatnio edytowany przez zoltan (2009-04-23 09:29:07)

4

Odp: $ajax->observeField i błąd form is not defined

Sam prototype, ale laduj zawsze oba, w ogole wyga tak jak by prototype byl nie podlinkowany, wklej mi kod linkujacy javascript u Ciebie.

5

Odp: $ajax->observeField i błąd form is not defined

Miałeś rację, prototype był źle podlinkowany. Konkretnie w default.ctp umieściłem:

echo $javascript->link(array('prototype'));

W katalogu /home/meq/workdir/cake/app/webroot/js/prototype wrzuciłem plik: prototype-1.6.0.3.js
Zmiana nazwy na prototype.js załatwiła sprawę.

Dzięki bardzo za pomoc.