Demonstration
Google App Engine Handler class
The following code is an example of how you may setup an AJAX handler class that validade changed cell content. It returns an JSON data structure that will be asyncrhonous handled and once validate the cell content will be accepted.
class
ContactsDemo(webapp.RequestHandler):
def
get(self):
cols
= []
cols.append( {'id':'rowid','label':'ContactKey','editable':False,'type': '','width':'10px'})
cols.append( {'id': 'name', 'label': 'Name','editable': True, 'type': '', 'width': '200px'})
cols.append( {'id': 'age', 'label': 'Age','editable': True, 'type': '', 'width': '10px'})
cols.append( {'id': 'phone', 'label': 'Phone','editable': True, 'type': '', 'width': '100px'})
rows = []
rows.append({'rowid': '1', 'name': 'Machado de assis', 'age' : '54', 'phone' : 'not applicable'})
rows.append({'rowid': '2', 'name': 'Sylvia Plath', 'age' : '33', 'phone' : '71 9451-7845'})
rows.append({'rowid': '3', 'name': 'Carl Sagan', 'age': '65', 'phone' : '81 8794-7845'})
rows.append({'rowid': '4', 'name': 'Machado de assis', 'age' : '54', 'phone' : 'not applicable'})
rows.append({'rowid': '5', 'name': 'Plath Assis', 'age' : '37', 'phone' : '71 9451-7845'})
rows.append({'rowid': '6', 'name': 'Sagan Machado', 'age': '55', 'phone' : '81 8794-7845'})
rows.append({'rowid': '7', 'name': 'Sylvia Carl', 'age' : '24', 'phone' : 'not applicable'})
rows.append({'rowid': '8', 'name': 'Assis Sagan', 'age' : '23', 'phone' : '71 9451-7845'})
rows.append({'rowid': '9', 'name': 'Carl Plath', 'age': '45', 'phone' : '81 8794-7845'})
template_values={'getURL' : None,
self.response.out.write(template.render(path, template_values))
return
def
post(self):cols.append( {'id':'rowid','label':'ContactKey','editable':False,'type': '','width':'10px'})
cols.append( {'id': 'name', 'label': 'Name','editable': True, 'type': '', 'width': '200px'})
cols.append( {'id': 'age', 'label': 'Age','editable': True, 'type': '', 'width': '10px'})
cols.append( {'id': 'phone', 'label': 'Phone','editable': True, 'type': '', 'width': '100px'})
rows = []
rows.append({'rowid': '1', 'name': 'Machado de assis', 'age' : '54', 'phone' : 'not applicable'})
rows.append({'rowid': '2', 'name': 'Sylvia Plath', 'age' : '33', 'phone' : '71 9451-7845'})
rows.append({'rowid': '3', 'name': 'Carl Sagan', 'age': '65', 'phone' : '81 8794-7845'})
rows.append({'rowid': '4', 'name': 'Machado de assis', 'age' : '54', 'phone' : 'not applicable'})
rows.append({'rowid': '5', 'name': 'Plath Assis', 'age' : '37', 'phone' : '71 9451-7845'})
rows.append({'rowid': '6', 'name': 'Sagan Machado', 'age': '55', 'phone' : '81 8794-7845'})
rows.append({'rowid': '7', 'name': 'Sylvia Carl', 'age' : '24', 'phone' : 'not applicable'})
rows.append({'rowid': '8', 'name': 'Assis Sagan', 'age' : '23', 'phone' : '71 9451-7845'})
rows.append({'rowid': '9', 'name': 'Carl Plath', 'age': '45', 'phone' : '81 8794-7845'})
template_values={'getURL' : None,
'postURL'
:
'contactsdemo',
'cols': simplejson.dumps(cols),
'rows': simplejson.dumps(rows)}
path
=
os.path.join(os.path.dirname(__file__),os.path.join('../zoqui/demos','demo-jgrideditor.html'))'cols': simplejson.dumps(cols),
'rows': simplejson.dumps(rows)}
self.response.out.write(template.render(path, template_values))
return
rowid
=
self.request.get('rowid')
fieldname = self.request.get('fieldname')
fieldvalue = self.request.get('fieldvalue')
ret = {}
ret['rowid']=rowid
ret['fieldname']=fieldname
if fieldname:
fieldname = self.request.get('fieldname')
fieldvalue = self.request.get('fieldvalue')
ret = {}
ret['rowid']=rowid
ret['fieldname']=fieldname
if fieldname:
ret['sts']='OK'
ret['fieldvalue']=ZString(fieldvalue).normalize().upper()
ret['msg']='Salvo'
else:ret['fieldvalue']=ZString(fieldvalue).normalize().upper()
ret['msg']='Salvo'
ret['fieldvalue']=fieldvalue
ret['sts']='ERROR'
ret['msg']='Invalid Value'
self.response.out.write(simplejson.dumps(ret))
ret['sts']='ERROR'
ret['msg']='Invalid Value'
self.response.out.write(simplejson.dumps(ret))
return