So you don't have to recreate it, the Autocomplete Helper is as follows.
It's a cut and paste of the work some other wonderful gentleman did, and I
turned off the validator because i was lazy.


class Zend_Controller_Action_Helper_AutoCompleteDojoNew extends
Zend_Controller_Action_Helper_AutoComplete_Abstract
{
    public function validateData($data)
    {
        return true;
    }

    public function prepareAutoCompletion($data, $keepLayouts = false) {
        $items = array();
        foreach ($data as $key => $value) {
            $items[] = array('label' => $value, 'name' => $value, 'key' =>
$key);
        }
        $final = array(
            'identifier' => 'key',
            'items' => $items,
        );
        return $this->encodeJson($final, $keepLayouts);
    }
}

On Tue, Nov 11, 2008 at 5:50 PM, Bart McLeod <[EMAIL PROTECTED]> wrote:

>  Hi Cameron,
>
> I tried to set up a testsite yesterday evening, but I ran out of time
> (mostly because I did not do much Dojo so far). I will keep looking into
> this and file a bug if I can confirm it.
>
> Will use your examples if possible to set it up and confirm the bug.
>
> While you are at it, could you evaluate a patch I provided for the dojo
> checkbox? It is Issue ZF-4274, you can download patches there.
>
> Regards,
>
> Bart McLeod
>
> Cameron schreef:
>
> I'm really stumped with this one, it flat out doesn't work in anything like
> the way you'd expect / want it to, and I can't find a single piece of
> documentation on this anywhere. I'm not even talking about dependent
> dropdowns here, all I am trying to do is get $form->populate to correctly
> work in my Edit action when I'm using a FilteringSelect that uses a store
> instead of setMultiOptions. Note, this exact same form works just fine (and
> submits the ID value correctly) from the New action, the ONLY thing that
> fails is the populate method, everything else works perfectly.
>
> Let's get in to the code. I've trimmed the unimportant parts.
>
> EDIT ACTION IN THE CONTROLLER:
>
>     public function editAction() {
>         $form = $this->getForm();
>         $id = (int)$this->_request->getParam('id', 0);
>         $form->setAction("/$this->_class/edit/id/$id")
>              ->setMethod('post')
>              ->setName('editform')
>              ->setElementsBelongTo('editform');
>
>         if ($this->_request->isPost()) {
>             //SAVE RECORD
>             $formData = $this->_request->getPost();
>             $formData['id'] = (int) $id;
>             $model = $this->getModel();
>             if (true === $model->update($formData)) {
>                 //SAVE SUCCESS
>                 $this->_redirect("/$this->_class/display/id/$id");
>             } else {
>                 //SAVE FAILURE, RETURN AND EDIT AGAIN
>                 $form->populate($formData);
>             }
>         } else {
>              //INITIAL LOAD, GET VALUES AND POPULATE
>              $model = $this->getModel();
>              $job = $model->get($id);
>              $form->populate($job);
>         }
>         $this->view->form = $form;
>
>     }
>
> ADDELEMENT METHOD FROM THE FORM CLASS
>
>         $this->addElement('FilteringSelect', 'fk_client_id', array(
>             'label'        => 'Client:',
>             'store'          => 'clientStore',
>             'autoComplete'   => 'false',
>             'hasDownArrow'   => 'true',
>             'id' => 'fk_client_id',
>         ));
>
> JAVASCRIPT THAT CREATES THE STORE
>
> dojo.declare("ClientReadStore", dojox.data.QueryReadStore, {
>     fetch:function (request) {
>         request.serverQuery = { autocomplete:1, str:request.query.name };
>         return this.inherited("fetch", arguments);
>     }
> });
>
> JSON FORMAT THE STORE RETURNS
> (this is a long story, I had to rewrite
> Zend_Controller_Action_Helper_AutoCompleteDojo because it doesn't work, as
> has been noted by others, but the end result is that it now outputs this
> JSON, and it works)
>
> ({"identifier":"key","items":[
>
> {"label":"aaaaaaaa","name":"aaaaaaaa","key":1},
> {"label":"bbbbbbb","name":"bbbbbbb","key":2},
> {"label":"vvvvvvvvv","name":"vvvvvvvvv","key":3},
> {"label":"ffffffff","name":"ffffffff","key":4},
> {"label":"ddddddd","name":"ddddddd","key":5}
> {"label":"sssssssss","name":"sssssssss","key":7},
> {"label":"rrrrrrrrrr","name":"rrrrrrrrrr","key":8},
> {"label":"jjjjjjjjjjjj","name":"jjjjjjjjjjjj","key":9}
>
> ]})
>
> EDIT ACTION VIEW SCRIPT
>
> <? Zend_Dojo_View_Helper_Dojo::setUseDeclarative();?>
>
> <div dojoType="ClientReadStore" jsId="clientStore"
>     url="/clients/autocomplete/format/ajax?autocomplete=1&str=*"
>     requestMethod="get"></div>
>
> <? echo $this->form; ?>
>
>
> As you can see, this is all pretty basic stuff, and follows (as far as I
> can piece together) the best practices for doing this sort of thing. Now.
> Here's the debugging information I've managed to coax out so far.
>
> If you call print_r($this->form-getValues()) in the View script, it returns
> this:
>
> Array ( [editform] => Array ( [fk_client_id] => 484 [fk_client_contact_id]
> => 459 [position] => CIVIL ENGINEER [quantity] => 1 [start] => ASAP?
> [duration] => 3 - 4 MTHS INIT [rate] => NEG [charge] => [experience] => MPD
> JV. DESIGN EARTHWORKS, DRAINAGE, ROADS. STOCK YARD. [notes] => [comment] =>
> COMMENT COMMENT COMMENT [contractor] => UNKNOWN [filled] => 2002-04-10
> 00:00:00 [fk_agency_id] => 0 ) )
>
> So as you can see, the variable we're working on here (fk_client_id) is
> being correctly populated in the view. However, when we do the same thing on
> the form from the Dojo side, we get an entirely different result.
>
> If you call alert(dojo.toJson(dijit.byId("editform").getValues())); in
> order to dump out the contents of the form, we get...
>
> {"editform[fk_client_id]":"","editform[fk_client_contact_id]":"","editform[position]":"CIVIL
> ENGINEER","editform[quantity]":"1","editform[start]":"ASAP?","editform[duration]":"3
> - 4 MTHS
> INIT","editform[rate]":"NEG","editform[charge]":"","editform[experience]":"MPD
> JV.  DESIGN EARTHWORKS, DRAINAGE, ROADS.  STOCK
> YARD.","editform[notes]":"","editform[comment]":"COMMENT COMMENT
> COMMENT","editform[contractor]":"UNKNOWN","editform[filled]":undefined,"editform[fk_agency_id]":"","editform[save]":"Save"}
>
> As you can see, the fk_client_id field is empty. SO. Is this a bug? Or am I
> doing something horribly wrong? <rant> Or am I supposed to be building some
> JS to... I'm not even sure any more, the closest I can get to making the
> form do anything at all has been
> dijit.byId("fk_client_id").setValue('<?=$this->form-getValue('fk_client_id'))?>');,
> but all that does is put the ID in the drop down, which certainly isn't what
> we want. Am I meant to use the ID, write an ajax call to go grab the name
> value associated with that ID, then set THAT as the value? Even that isn't
> going to work correctly because the dijit form setValue doesn't support a
> key=>value pair, so it'll just submit the text version, which I suppose I
> could convert back to the id in my controller, but goddamn it if that is the
> ONLY way to make this work then I'm packing up and going home, because
> that's an impossibly ugly hack, and having to write that would make my skin
> crawl.</rant>
>
>
> If anyone has any ideas at all on how to make this work, or can point me to
> some documentation, please, let me know. I'm stumped. I promise, just as
> soon as I work this whole thing out, I will post a giant-ass tutorial on it
> so that no one ever has to suffer again.
>
>
> --
>   Bart McLeod
> *Space Web Internet Team*
> Middenlaan 47
> 6865 VN Heveadorp
> The Netherlands
> *t* +31(0)26 3392952
> *m* 06 51 51 89 71
> [EMAIL PROTECTED] [EMAIL PROTECTED]
> www.spaceweb.nl  [image: zce logo] [image: zce PHP 5 logo]
>
> *Bart McLeod is a Zend Certified Engineer.*
>
> Click to verify! <http://www.zend.com/zce.php?c=ZEND004591&r=218204904>
>

<<Php5-zce-logo.gif>>

<<logo_230.gif>>

<<zce_logo.gif>>

Reply via email to