seitime-frappe/docs/html/_sources/client_side_script.txt
2011-06-08 14:24:18 +05:30

85 lines
2.4 KiB
Text

Client Side Scripts
===================
Introduction
------------
Client side scripts are written in javascript and they are used to execute function on event triggers.
These scripts can be used to:
* Manipulate views
* Do server calls (AJAX)
* Validate entries
* Do calculations
Client scripts can be written inside of DocType in the "Client Script" tab
cur_frm Object
--------------
All client script functions are attached to the cur_frm.cscript object. This object holds the functions
relating to a DocType (form)
onload event
------------
onload is called when the a record is loaded for the first time. Example::
cur_frm.cscript.onload = function(doc, doctype, docname) {
if(!doc.from) {
doc.from_user = user;
refresh_field('user')
}
}
refersh event
-------------
refresh event is similar to the onload event. Except that it is also called each time the page is refreshed
either via a user refresh, save or otherwise.
Server Calls
------------
A typical use is to get/set data at server side. To do this, the framework has built-in AJAX interface using
the $c_obj (call server object) function. The typical pattern is as follows::
// function will be called when the server responds
var callback = function(response, responseInText) {
// set the new value
// re-assign the doc record because you are inside the callback
var doc = locals[doc.doctype][doc.docname]
doc.new_value = response.message
refresh_field('new_value');
}
// call this object on the server
$c_obj([doc], 'get_my_value', doc.based_on, callback);
Field Level Triggers
--------------------
You can set functions to be called when values are changed in the form, at the "onchange" event.
To set a trigger, in the Field table, set the value of the Trigger column to "Client".
Declare a function to be called by its fieldname::
// attach a trigger on the "my_value" field
cur_frm.cscript.my_value = function(doc, doctype, docname) {
msgrint("My value has been changed")
// do something
}
Fetch Pattern
-------------
Another typical pattern is to get values based on other values, like when you select a Customer, its type and
contact info should come automatically, to do this, you can use the standard fetch pattern on link fields::
// add_fetch(link, source_field_name, target_field_name)
add_fetch('customer', 'contact_details', 'contact_details')