[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