I had the need this evening to put together a custom editor for a ListGrid field. I had a DataSource with 'currency' (text) and amount (integer) fields and I wanted to make one editor for them.
After reading around on the forums it seemed like subclassing CanvasItem was the way to go. I couldn't find a complete example of what I wanted so I thought I'd share my efforts.
The code below extends CanvasItem to embed a dynamic form with a Currency drop down and a monetary amount input box.
Note: It isn't perfect (tabbing out doesn't cause it to lose focus and I get a JavaScript error).
In any case, I hope someone might find it useful as an example.
I'll edit this sample if I make it better.
After reading around on the forums it seemed like subclassing CanvasItem was the way to go. I couldn't find a complete example of what I wanted so I thought I'd share my efforts.
The code below extends CanvasItem to embed a dynamic form with a Currency drop down and a monetary amount input box.
Note: It isn't perfect (tabbing out doesn't cause it to lose focus and I get a JavaScript error).
In any case, I hope someone might find it useful as an example.
Code:
isc.defineClass("CurrencyAmountEditor", "CanvasItem").addProperties({ shouldSaveValue: true }); CurrencyAmountEditor.addMethods({ init : function() { this.Super("init", arguments); } ,createCanvas: function() { var canvas = isc.DynamicForm.create({ values: this.getValue() ,cellPadding: 0 ,items: [ { name: 'currency', type: 'select', dataPath: 'currency', valueMap: ['USD','EUR'], showTitle: false, width: 50} ,{ name: 'amount', type: 'integer', dataPath: 'amount', showTitle: false, stopOnError: true ,width: 70 ,selectOnFocus: true //,mask: '999,999,999' ,keyDown: "if (keyName == 'Enter' || keyName == 'Tab') "+this.ID+".endEditing(form.values)" } ] }); return canvas; } ,endEditing: function(values) { if ( this.grid ) { this.grid.endEditing(); } } });