Executing Javascript with low/high priority
In this example you learn about executing javascript with Application::executeJsFunction() and
Application::executeSelectorFunction() with different priority levels.
You can execute JavaScript using one of three priority-levels: Application::PRIORITY_LOW , Application::PRIORITY_STANDARD and Application::PRIORITY_HIGH
Scripts with higher priority-level will be placed in the javascript execution-queue before scripts with lower ones
and scripts with equal priority level are executed in the order you send them.
QCubed task order:
- Render/update html
- Execute JavaScript functions with Application::PRIORITY_HIGH
- Execute QActions attached to controls with Events
- Execute JavaScript functions with Application::PRIORITY_STANDARD
- Execute JavaScript functions with Application::PRIORITY_LOW
Take a look at the example below. By clicking on one of the buttons the
datagrid gets updated and an alert box will show up.
Try clicking on buttons of both rows and look at the different update-behaviour.
The interesting code resides in the methods renderButton_Click and renderLowPriorityButton_Click
In these methods the datagrid is marked as modified (render it again, including all the buttons),
some JavaScript alert boxes will show up and the color of the buttons changes due to
adding a css class via JavaScript.
The parameter Application::PRIORITY_LOW forces the script to be executed after all scripts with higher priority.
When the buttons are (re)rendered they get their standard color applied (and the JavaScript returned by GetEndScript is executed again).
If you hit a update & low priority alert button the alert boxes have low priority,
the JavaScript for adding the new css class is executed before the alerts show up
and the color is changed immediately.
When hitting a update & alert button the color will be changed after the alert boxes show up because
all scripts are executed with standard priority.
Strategies for executing Javascript
The
Application::executeJsFunction(),
Application::executeSelectorFunction() and
Application::executeControlCommand() functions are available to use invoke javascript in a number of ways.
If these are not adequate, we recommend you put your javascript in a file, and invoke that javascript using one of the
above functions.