[dev] Ajax on Horde

Luis Felipe Marzagao lfbm.andamentos at gmail.com
Thu Oct 12 12:19:13 UTC 2017



Em 12/10/2017 03:27, Sebastian Birnbach escreveu:
> Big thanks to you, Luis, you just made my day! :-)
>
>   Sebastian
>

Glad it helped. The lack of documentation sometimes makes it really 
cryptic to figure things out.


> 2017-10-12 1:15 GMT+02:00 Luis Felipe Marzagao 
> <lfbm.andamentos at gmail.com <mailto:lfbm.andamentos at gmail.com>>:
>
>
>
>     Em 11/10/2017 04:33, Sebastian Birnbach escreveu:
>
>         Not much is known about Horde's way to do Ajax. The doc on
>         https://wiki.horde.org/Doc/Dev/HordeAjaxApplications
>         <https://wiki.horde.org/Doc/Dev/HordeAjaxApplications> seems
>         to be a bit
>         wobbly and is at least partly outdated.
>
>         I seek to understand the very basic exchange of information
>         between a
>         client side document and a server side class. Looking into
>         Horde is often
>         like looking into a live organism: too many things going on at
>         the same
>         time to understand an isolated feature.
>
>         On my own I came about this far:
>
>         * <app> registers an Ajax handler in
>         <app>/lib/Ajax/Application.php:
>         class IMP_Ajax_Application extends Horde_Core_Ajax_Application{
>            $this->addHandler(Some_Path_To_Class);
>           }
>
>         * <app>/lib/Some/Path/To/Class.php defines the processing code:
>         class IMP_Ajax_Application_Handler_Draft extends
>         Horde_Core_Ajax_Application_Handler{
>           public function foo() {return "hello world"}
>         }
>
>         * <app>/js/<app>.js defines a variable that contains a
>         function that
>         eventually calls doAction(action, params, opts)
>         [this bit is unclear to me]
>
>         * on the client side, based on some event, call that function
>         so that
>         doAction() gets triggered
>
>         * a request will be sent to Horde Core which distributes it
>         back to the
>         registered class to process and return its response
>
>         * now, the response should be passed on to some callback
>         function in the
>         <app>.js file, I suppose
>
>
>     Here's a working example from my private app called Cashier. Hope
>     it helps:
>
>     cashier/js/form_transaction.js:
>
>     HordeCore.doAction(
>                 /* PHP Action */
>                 'getCategoryUnitPrice',
>
>                 /* POST parameters */
>                 {
>                     selected_category_id: selectedCategoryId
>                 },
>
>                 /* Options */
>                 {
>                     callback: function(resp) {    /* here the variable
>     resp is the response returned (an object with unitPrice property) */
>                         doUnitPriceUpdate(resp.unitPrice);
>                         makeUnitPriceFieldBright();
>                         /* Cache the result. */
>                         this.cache.unitPrice[selectedCategoryId] =
>     resp.unitPrice;
>                         this.updateItemTotal(row);
>                         this.updateRelatedFields();
>                         HordeCore.loadingImg('loadingimg', baseElt,
>     false);
>                     }.bind(this),
>                     ajaxopts: {
>                         asynchronous: true
>                     }
>                 }
>             );
>
>
>     cashier/lib/Ajax/Application.php:
>
>     class Cashier_Ajax_Application extends Horde_Core_Ajax_Application
>     {
>         /**
>          * Application specific initialization tasks should be done in
>     here.
>          */
>         protected function _init()
>         {
>     $this->addHandler('Cashier_Ajax_Application_Handler_FormTransaction');
>         }
>     }
>
>
>     cashier/lib/Ajax/Application/Handler/FormTransaction.php:
>
>     class Cashier_Ajax_Application_Handler_FormTransaction extends
>     Horde_Core_Ajax_Application_Handler
>     {
>         public function getCategoryUnitPrice()
>         {
>             $obj = new stdClass();
>             $driver = $GLOBALS['injector']->getInstance('Cashier_Driver');
>             $cat_obj =
>     $driver->getCategoryById($this->vars->selected_category_id);
>             $obj->unitPrice =
>     Cashier_Util::formatMoney($cat_obj->category_unit_price);
>             return $obj;
>
>         }
>     }
>
>
>         Could somebody please shed some light on this?
>
>         Thanks
>
>            Sebastian
>
>
>     -- 
>     dev mailing list
>     Frequently Asked Questions: http://wiki.horde.org/FAQ
>     To unsubscribe, mail: dev-unsubscribe at lists.horde.org
>     <mailto:dev-unsubscribe at lists.horde.org>
>
>



More information about the dev mailing list