PDA

View Full Version : Ext.ux.MetaForm - A FormPanel configured by metadata received from server



Pages : 1 [2]

deka49
13 Apr 2009, 2:20 AM
thanks, it works fine

fields.js


rp.quantiField = Ext.extend(Ext.form.TextField, {

initComponent:function() {
var config = {
maskRe: /([0-9\s]+)$/
};

// apply config
Ext.apply(this, Ext.apply(this.initialConfig, config));

rp.quantiField.superclass.initComponent.apply(this, arguments);
} // eo function initComponent

,onRender: function() {
rp.quantiField.superclass.onRender.apply(this, arguments);

}
});
Ext.reg('quantiField', rp.quantiField);


and php


array(
"name"=>"AddQuantite"
,"fieldLabel"=>"Quantite"
,"editor"=>array(
"allowBlank"=>false
,"xtype"=>"quantiField"
)
)

FabriceTerrasson
19 May 2009, 7:25 AM
Hi, Thank you Jsakalos for this great plugin !

Tried henryivy's example to populate some textfields inside fieldset, the fieldset and fields show correctly but it's not populated.
Without fieldset it's populated, (I didn't alter the names).


Thanks for your replay.

...


{"success":true,"metaData":{
"fields":[{
"editor":{"xtype": "fieldset","columnCount":2,"title": "Company Information","defaultType": "textfield", "height": 200, "width":500
, items: [{fieldLabel: "Comp Name","name": "compName"},{fieldLabel: "Address1","name": "Address1"}]
}},
{
"editor":{"xtype": "fieldset","title": "Company Information","defaultType": "textfield", "autoHeight": "true", "width":300
, items: [{fieldLabel: "Address2","name": "Address2"}]}
}],
"formConfig":{"labelAlign":"right","columnCount":1,"labelWidth":80,"defaults":{"width":130}}},
"data":{"compName":"My Company","Address1":"First Street","Address2":"London"}}
Fieldset was working fine but data is not display.
......

it shows but doesnt populate :


"metaData": {
"fields": [
{
"editor": {
"name": "blabla",
"title": "blabla",
"xtype": "fieldset",
"columnCount": "2",
"defaultType": "textfield",
"height": "auto",
"width": "auto",
"items": [
{
"name": "birthCity",
"fieldLabel": "birthCity",
"editor": {
"allowBlank": true
}
},
{
"name": "birthPc",
"fieldLabel": "birthPc",
"editor": {
"allowBlank": true
}
},
]
}
}
it shows and populate :


"metaData": {
"fields": [
{
"name": "birthCity",
"fieldLabel": "birthCity",
"editor": {
"allowBlank": true
}
},
{
"name": "birthPc",
"fieldLabel": "birthPc",
"editor": {
"allowBlank": true
}
},
...
Is there alternative to regroup *fields to get it populated ?

FabriceTerrasson
20 May 2009, 5:46 AM
Is alter or override onMetaChange: the right way ?



,onMetaChange:function(form, meta) {
[....]
// loop through metadata colums or fields
// format follows grid column model structure
Ext.each(meta.columns || meta.fields, function(item) {
if(true === ignore[item.name]) {
return;
}

// console.info(item.editor.xtype+' '+item.name);
if ('fieldset' == item.editor.xtype)
{
console.info(item.editor.items);
var config;
Ext.each(item.editor.items, function(item) {
do something to get fieldset added correctly
[...]
});
});
}
else
{
var config = Ext.apply({}, item.editor, {
name:item.name || item.dataIndex
,fieldLabel:item.fieldLabel || item.header
,defaultValue:item.defaultValue
,xtype:item.editor && item.editor.xtype ? item.editor.xtype : 'textfield'
});
}

jsakalos
20 May 2009, 12:53 PM
Yes, onMetaChange is the core function of the ux.

michiel
22 May 2009, 3:39 AM
Hi Saki,

First of all, thanks for this great extension! Works like a charm and really saved my day. I have one question about the general usage of it.

I'm basically wondering how this extension performs compared to hardcoded javascript. I mean, what effect does this extension have on speed, memory usage, flexibility etc. I mean, is it generally better to define form objects in the javascript, and reuse them? And only use this extension, in the cases you *really have to*? Or is using metadata from the server for regular forms just as good?

Hope you can provide some insight in this. Thanks!

Michiel

jsakalos
22 May 2009, 4:11 AM
I haven't measured performance but I think that there will be no or little difference. Using of metadata from server depends on the character of your app. If the form is stable and is not likely to change you can define it in javascript, but metadata from server would also do. If the form is likely to change, e.g. different form fields for different users, then it's better to use MetaForm.

jfvwi
17 Jun 2009, 1:46 PM
Saki - tried the MetaForm example and it's not working in 3.0RC2. Was wondering if you had tried it? It posts in Firefox correctly but the fields don't appear in the form...

Thanks for your help.

jsakalos
18 Jun 2009, 12:23 AM
I'll take a look after Ext 3.0 final is out.

linker85
3 Jul 2009, 9:43 PM
Hey! I was checking one of the examples, where it´s formconfig.php goes like:


<?php

$formConfig = array(
"labelAlign" => "right",
"columnCount" => 2,
"labelWidth" => 120,
"defaults" => array(
"width"=> 180 ,
"msgTarget" => "side",
"labelSeparator" => '',
'labelStyle' => 'padding-top:5px'
)
);

$fields = array(
array(
'xtype' => 'fieldset',
'autoHeight' => true,
'width' => 400,
'collapsible' => false,
'title' => 'Employment Info',
'items' => array(
array(
'name' => 'date_employed',
'fieldLabel' => 'Date Employed',
'width' => 125,
'allowBlank' => false,
'xtype' => 'datefield',
'disabledDays' => array(0, 6),
'format' => 'M d, Y',
'disabledDaysText' => 'Weekends For Employment Date? Certainly Not!'
),
array(
'name' => 'employee_id',
'fieldLabel' => 'Employee ID',
'width' => 140,
'allowBlank' => false,
'xtype' => 'textfield'
),
array(
'hiddenName' => 'sex',
'fieldLabel' => 'Gender',
'width' => 140,
'allowBlank' => false,
'xtype' => 'combo',
'typeAhead' => true,
'store' => array(
array('m', 'Male'),
array('f', 'Female')
)
)
)
)
);

$config = array(
'success' => true,
'metaData' => array(
'fields' => $fields,
'formConfig' => $formConfig
),
'data' => array()
);

echo json_encode($config);

?>


When I look into firebug after clicking submit I get:


{"success":true,"metaData":{"fields":[{"xtype":"fieldset","autoHeight":true,"width":400,"collapsible"
:false,"title":"Employment Info","items":[{"name":"date_employed","fieldLabel":"Date Employed","width"
:125,"allowBlank":false,"xtype":"datefield","disabledDays":[0,6],"format":"M d, Y","disabledDaysText"
:"Weekends For Employment Date? Certainly Not!"},{"name":"employee_id","fieldLabel":"Employee ID","width"
:140,"allowBlank":false,"xtype":"textfield"},{"hiddenName":"sex","fieldLabel":"Gender","width":140,"allowBlank"
:false,"xtype":"combo","typeAhead":true,"store":[["m","Male"],["f","Female"]]}]}],"formConfig":{"labelAlign"
:"right","columnCount":2,"labelWidth":120,"defaults":{"width":180,"msgTarget":"side","labelSeparator"
:"","labelStyle":"padding-top:5px"}}},"data":[]}


Why is data empty?

jsakalos
3 Jul 2009, 11:52 PM
Because:


$config = array(
'success' => true,
'metaData' => array(
'fields' => $fields,
'formConfig' => $formConfig
),
'data' => array()
);

linker85
4 Jul 2009, 6:24 AM
So how can I get the data that it´s entered by the user?

jsakalos
4 Jul 2009, 1:23 PM
Entered by the user? He fills the data in fields, doesn't he? Or, have I misunderstood the question?

linker85
4 Jul 2009, 1:45 PM
How can I get the form data into my php backend so I can later manipulate (perform bussiness logic)

I mean the data that is entered by the user so I can then do something like $name = $get_["name"];

jsakalos
4 Jul 2009, 2:35 PM
http://examples.extjs.eu/?ex=formloadsubmit

linker85
7 Jul 2009, 6:41 PM
Hi again!:)
After checking different submit codes I want to do something like:


Ext.onReady(function(){

Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';

var form_employee = new Ext.form.Form({
labelAlign: 'right',
labelWidth: 175,
url:'forms-submit-process.php',
buttonAlign: 'right'
});

var employee_name = new Ext.form.TextField({
fieldLabel: 'Name',
name: 'name',
width:190
});

form_employee.fieldset(
{legend:'Employee Edit'},
employee_name
)

employee_data = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url: 'forms-submit-getdata.php?id=14'}),
reader: new Ext.data.JsonReader({},[ 'id', 'name']),
remoteSort: false
});

employee_data.on('load', function() {

employee_name.setValue(employee_data.getAt(0).data.name);
employee_active.setValue(Ext.util.Format.boolean(employee_data.getAt(0).data.active));

form_employee.addButton('Save', function(){
if (form_employee.isValid()) {
form_employee.submit({
params:{
action:'submit',
id:employee_data.getAt(0).data.id
},
waitMsg:'Saving...'
});
}else{
Ext.MessageBox.alert('Errors', 'Please fix the errors noted.');
}
}, form_employee);

form_employee.render('employee-form');

});

employee_data.load();

so here is the code for my dynamic form:


<?php

$formConfig = array(
"url"=>"forms-submit-process.php",
"labelAlign" => "right",
"columnCount" => 2,
"labelWidth" => 120,
"defaults" => array(
"width"=> 180 ,
"msgTarget" => "side",
"labelSeparator" => '',
'labelStyle' => 'padding-top:5px'
)
);

$fields = array(
array(
'name' => 'name',
'fieldLabel' => 'Name',
'width' => 140,
'allowBlank' => false,
'xtype' => 'textfield'
),
array(
'text' => 'Submit',
'xtype' => 'button',
'handler' => "Ext.MessageBox.alert('Test');"
)

);

$config = array(
'success' => true,
'metaData' => array(
'fields' => $fields,
'formConfig' => $formConfig
),
'data' => array('name'=>'A','position'=>'B','ambition'=>'C')
);

echo json_encode($config);
?>

and I get after clicking the button:


{"success":true,"metaData":{"fields":[{"name":"name","fieldLabel":"Name","width":140,"allowBlank":false
,"xtype":"textfield"},{"text":"Submit","xtype":"button","handler":"Ext.MessageBox.alert('Test');"}],"formConfig"
:{"url":"forms-submit-process.php","labelAlign":"right","columnCount":2,"labelWidth":120,"defaults":
{"width":180,"msgTarget":"side","labelSeparator":"","labelStyle":"padding-top:5px"}}},"data":{"name"
:"A","position":"B","ambition":"C"}}


this.handler.call is not a function
onClick()(Object browserEvent=Event blur button=-1 type=blur)ext-all-debug.js (línea 20504)
h()()ext-all-debug.js (línea 1723)
apply()()ext-base.js (línea 9)
[Break on this error] this.handler.call(this.scope || this, this, e);


Why is it generating that error?

jsakalos
8 Jul 2009, 2:09 AM
I don't know at the first glance, anyway, you shouldn't explicitly call .render(). Never!

canxss
19 Jul 2009, 10:07 AM
Hi Saki,

Did you have time to check if MetaForm works on Ext 3.0?

jsakalos
19 Jul 2009, 10:42 AM
Not yet, I had 2 crazy weeks... Maybe this week.

mystik
20 Jul 2009, 6:01 AM
Hi Saki,

I've been using your MetaForm for a while now (under Ext 2.2), it's great.

The only problem I've found is that at one time, the form was messed up (see attachment, the Date till and Document labels are only shown, and not the fields itself. But only in Firefox (3.0.6, didn't test other Firefox versions).
In IE7 and Chrome the layout and visibility was ok.

Thus, In Firefox, the fields would become visible (and correct layout), after a redraw (e.g. resizing browser window, and then maximing it again).

After some digging and testing, I found a fix by changing the following code in onMetaChange,



if(this.rendered && 'string' !== typeof this.layout) {
this.el.setVisible(false);
this.doLayout();
this.el.setVisible(true);
}
to



if(this.rendered && 'string' !== typeof this.layout) {
this.el.setVisible(false);
this.el.setVisible(true);
this.doLayout();
}Tested it completely, and no side affects for my application.

But probably this will provide other problems, or why did you implement this setVisible(false); doLayout; setVisible(true) ?

Just wanted you to know this little problem.

salvo
27 Jul 2009, 7:24 AM
Hi Saki,

Did you have time to check if MetaForm works on Ext 3.0?

No it does not with 3.0.0 final. The code executes without error but the form just does not render.
It's OK with 2.3.0 though.

jsakalos
27 Jul 2009, 12:58 PM
Does mystik's fix work for you?

salvo
29 Jul 2009, 2:28 AM
Hi Saki,

You're right Mystik's trick fixes the rendering issue with ExtJS 3.0.0
http://www.extjs.com/forum/showthread.php?p=360868#post360868

Thanks to both of you guys!

hallikpapa
5 Aug 2009, 1:46 PM
This is exactly what I was looking for. I have multiple combo boxes that are populated from the DB. I was trying to extend a few combo boxes to their own plugins and just call the xtype, but it doesn't seem to be working. I have an array from php with key=>value that would be used in the option box like value=>display name.

How would I associate these data results with my combo box? Would I somehow define the JsonStore in the php so when the config is returned, it can also read the data values, or do I put the store in my Ext.extend plugin? Here is the pertinent section from my $formConfig


array(
"name"=>"userRank",
"fieldLabel"=>"Rank/Title",
"emptyText"=>'Select Rank',
"editor"=>array(
"xtype"=>"rankcombo"
)
),


And where the data is populated ($rank is $k=>$v). And I json_encode it and return. data displays fine up to the rank, and dies with an irrelevant error:

comp.getItemId is not a function
ext-all-debug.js
Line 17429


"data"=>array(
"userName"=>$user_data['userName'],
"firstName"=>$user_data['firstName'],
"lastName"=>$user_data['lastName'],
"userRank"=>$rank,
"email"=>$user_data['email'],
"isActive"=>$user_data['isActive'],
"isAdmin"=>$user_data['isAdmin']
)



And finally, here is the plugin I just started modding from an example I saw on your site.


// create namespace for plugins
Ext.namespace('Ext.ux.adportal');

Ext.ux.adportal.RankCombo = function(config) {
Ext.apply(this, config);
};

// plugin code
Ext.extend(Ext.ux.adportal.RankCombo, Ext.util.Observable, {
init:function(combo) {
Ext.apply(combo, {
tpl: '<tpl for=".">'
+ '<div class="x-combo-list-item ux-icon-combo-item '
+ '{' + combo.iconClsField + '}">'
+ '{' + combo.displayField + '}'
+ '</div></tpl>',

onRender:combo.onRender.createSequence(function(ct, position) {
// adjust styles
this.wrap.applyStyles({position:'relative'});
this.el.addClass('ux-icon-combo-input');

}), // end of function onRender

setValue:combo.setValue.createSequence(function(value) {
this.setIconCls();
})
});
} // end of function init
}); // end of extend

// end of file

//register xtype
Ext.reg('rankcombo', Ext.ux.adportal.RankCombo);

This is an excellent plugin, just could use a tip or two! Thank you.

jsakalos
5 Aug 2009, 3:34 PM
You should first check that your extended combos (beware, they are extensions, not plugins) work standalone. Then you put them to MetaForm. BTW, MetaForm is extension, not plugin.

http://blog.extjs.eu/know-how/extension-or-plugin/

hallikpapa
5 Aug 2009, 11:13 PM
Thanks, was a simple fix been working on this stuff too long tonight. One last question though, if I have a combo box (rscombo) that populates based on another (districtcombo), and have the listener hard coded in the current form, would I put this code in the php somehow? I saw your blog on best way to handle component communication. Both combo boxes below extend thej Ext.Form.Combobox, so I figured I needed to put my listeners in the php where I declare the xtype, but cannot figure out how.



}, {
fieldLabel: 'District',
xtype: 'districtcombo',
width:190,
listeners:{select:{fn:function(combo, value) {
var rs = Ext.getCmp('rsID');
rs.clearValue();
rs.setDisabled(true);
rs.store.removeAll();
rs.store.reload({
params: { district_id: value.id }
})
rs.setDisabled(false);
}}
}
}, {
fieldLabel: 'RS',
xtype: 'rscombo',
disabled: true,
width:190
},

PHP


$fields[] =
array(
"name"=>"mddistrict",
"fieldLabel"=>"District",
"emptyText"=>'Select District',

"editor"=>array(
"xtype"=>"districtcombo"
)
);
break;
case 'rs':
$rsEnabled = "false";
if(is_numeric($user_data['UserMetaData'][$i]['value'])) { $rsEnabled = "true"; }
$fields[] =
array(
"name"=>"mdrs",
"fieldLabel"=>"RS",
"emptyText"=>'Select RS',
"editor"=>array(
"disabled"=>"$rsEnabled",
"xtype"=>"rscombo"
)
);

jsakalos
5 Aug 2009, 11:27 PM
You cannot easily deliver functions from the server to MetaForm fields, therefore, any specialties are to be in extended fields.

satishp
11 Aug 2009, 2:18 AM
Hi,
This extension is really helpful for me.
I want to create dynamic form having three fieldset.
I have tried following php code but it does not show fieldset and field label. I have tested it on IE7 and FF 3.0.3.



<?php
$formConfig = array(
"labelAlign" => "right",
"columnCount" => 1,
"labelWidth" => 120,
"defaults" => array(
"width"=> 250
)
);
$fields = array(
array(
'xtype' => 'fieldset',
//'autoHeight' => true,
//'width' => 200,
//'collapsible' => false,
'title' => 'Personal Info',
'items' => array(
array(
'name' => 'name',
'fieldLabel' => 'First Name',
'width' => 80,
'allowBlank' => false,
'xtype' => 'textfield'
)
)
)
);
$config = array(
'success' => true,
'metaData' => array(
'fields' => $fields,
'formConfig' => $formConfig
),
'data' => array()
);
echo json_encode($config);
?>


Thanks in advance...........

jsakalos
11 Aug 2009, 1:13 PM
Fieldsets are not natively supported - perhaps if you created them as extensions, however, I've never tried this approach.

The design principle was simplicity, therefore no complex fields/sub-layouts.

small dragon
12 Aug 2009, 2:09 AM
jsakalos. very good. running well . no error. (come from china.)

hallikpapa
12 Aug 2009, 9:24 PM
I was using your meta form plugin, but switched to the meta tabs plugin as it suits my needs more. Now I noticed that the setValue function in my combo box xtypes are not being called anymore.

An example of how I set this up in php is:

$fields[] =
array(
"name"=>"meta-district",
"fieldLabel"=>"District",
"emptyText"=>'Select District',
"xtype"=>"districtcombo"
);

All of the JSON response is correct, as all my text fields populate correctly, and I can see the "meta-district":6 in the response. I am thinking I am missing a setting, but not sure? here is my combo box that worked fine in the MetaForm plugin, but trying to get work in the MetaTabForm plugin. The Bold line below is where I put the break point and did a console.log("MADE IT HERE"); to see what happens when the form is loaded with data. And it never hit it....


Ext.ux.adportal.DistrictCombo = function(config) {

// call parent constructor
Ext.ux.adportal.DistrictCombo.superclass.constructor.call(this, config);

this.tpl = config.tpl ||
'<tpl for="."><div class="x-combo-list-item x-icon-combo-item {'
+ this.iconClsField
+ '}">{'
+ this.displayField
+ '}</div></tpl>'
;

this.on({
render:{scope:this, fn:function() {
var wrap = this.el.up('div.x-form-field-wrap');
this.wrap.applyStyles({position:'relative'});
this.el.addClass('x-icon-combo-input');
}},
select:{fn:function(combo,value) {
var rs = Ext.getCmp('rsID');
rs.clearValue();
rs.setDisabled(true);
rs.store.removeAll();
rs.store.reload({
params: { district_id: value.id }
})
rs.setDisabled(false);
}}
});
}

// extend
Ext.extend(Ext.ux.adportal.DistrictCombo, Ext.form.ComboBox, {
//id : 'districtID',
initComponent: function() {
Ext.apply(this, {
store: new Ext.data.Store({
reader : new Ext.data.JsonReader({
root : 'data'
}, [ {
name : 'id', type : 'int'
},{
name : 'name', type : 'string'
}]),
autoLoad : true,
url : '../extjs.php?act=district'
}),
valueField : 'id',
hiddenName : 'district-id',
displayField : 'name',
typeAhead : true,
lastQuery : '',
triggerAction : 'all'
//mode : 'remote'
});
Ext.ux.adportal.DistrictCombo.superclass.initComponent.apply(this,arguments);
},
setValue: function(value) {
console.log("MADE IT HERE");
if(!Ext.isDefined(this.store.totalLength)){
this.store.on('load', this.setValue.createDelegate(this, arguments), null, {single: true});
if(this.store.lastOptions === null){
this.store.load();
}
return;
}
Ext.ux.adportal.DistrictCombo.superclass.setValue.call(this, value);
}

}); // end of extend

//register xtype
Ext.reg('districtcombo', Ext.ux.adportal.DistrictCombo);

I took a screenshot of jumping thru the code, and meta-district is set, but field comes back as null, and it looks like because field = this.findField(id) returns null....

<edit> I saw that it was trying to look it up by 'meta-district' and failing. couldn't find the combo box object. I set the combo-box id to meta-district, and it started working. I am going to keep playing with this to make sure it will not cause any problems elsewhere in the code defining the combobox like that

jsakalos
13 Aug 2009, 12:28 AM
Do you set value? I've tested http://metatabsform.extjs.eu and it sets values normally.

More clearly: Is value property returned from the server as part of config?

small dragon
13 Aug 2009, 6:09 PM
good metatabsform, Thank you for sharing....................

extjs3user
21 Aug 2009, 2:48 AM
In our application we have been using metaform and it has been working perfect till we took the latest code of Extjs 3.0.

this.removall() code in metaform is causing the problem.

In this method we have the following code

this.items.each(this.remove,this);

Since we are adding the panel in the metaform, the above code is called with added panel as the item. Calling this.remove calls the remove method from the formlayout class.

In formlayout class when removing a particular item they are looking for getItemCt() which is not defined for panel. So the form is not rendering.

Please help me in this regard.

hallikpapa
25 Aug 2009, 12:55 PM
Do you set value? I've tested http://metatabsform.extjs.eu and it sets values normally.

More clearly: Is value property returned from the server as part of config?

I solved my issue. It was not loading the store and passing the data properly. What about an issue with doing the meta tabs in a form? I have an issue where there are 3 tabs, activeTab:0.

Firefox: Clicking on the 2nd & 3rd tab shows the form correctly.

IE: The first time I click on the 2nd and 3rd tab, they are blank. But if I click off, then click back into it, it renders the form. I thought it may have something to do with deferredRender, but I am told I need that setting to submit all 3 tabs when I submit the form. In my $tabs array I also have "hideMode"=>"offsets",

This is my form and Tab config in php. I figure this is where I am lacking as I have done no modifying of your awesome metatabsform plugin.


private function formConfig()
{
return
array(
"labelAlign"=>"left",
"labelWidth"=>100,
"labelPad"=>10,
"defaultType"=>"textfield",

"defaults"=>array(
"msgTarget"=>"side"
)
);
}
private function tabPanelConfig()
{
return
array(
"activeItem"=>0,
"border"=>false,
"columnCount"=>1,
"deferredRender"=>false,
"defaults"=>array(
"bodyStyle"=>"overflow-x:hidden" //TODO: Fix horizontal scroll bar in IE )
);
}


$tabs =
array(
"title"=>"Permissions",
//"iconCls"=>"icon-bulb",
"autoScroll"=>true,
"columnCount"=>1,
"hideMode"=>"offsets",
"frame"=>true,
"fields"=>$permissionFields
),
array(
"title"=>"Meta Data",
//"iconCls"=>"icon-bulb",
"autoScroll"=>true,
"columnCount"=>1,
"hideMode"=>"offsets",
"frame"=>true,
"fields"=>$metaDataFields
)

fausastu
29 Sep 2009, 8:34 AM
Great extension Saki!.

Some notes:

I found afterLayout event is fired four times before displaying form. Only the last have form items populated (property metaForm.getForm().items.length > 0). So if you need some field manipulation you need test this property before access them, otherwise you get errors.

If you need access record data in this events, you need change the beforeaction event
to :



,beforeAction:function(form, action) {
action.success = function(response) {
var result = this.processResponse(response);
if(result === true || !result.success || !result.data){
this.failureType = Ext.form.Action.LOAD_FAILURE;
this.form.afterAction(this, false);
return;
}
// original
// this.form.clearInvalid();
// this.form.setValues(result.data);
// this.form.afterAction(this, true);

this.form.data=result.data; // <--------------- add this line
this.form.afterAction(this, true);
this.form.clearInvalid();
this.form.setValues(result.data);
};




There is no a beforeShow event?

jsakalos
30 Sep 2009, 2:15 AM
Thank you for the info.

huggy06
8 Oct 2009, 6:34 AM
Hello Saki,

Great extension, I have no problem with ext 2 but with 3.0.0, panel does not render.

There is no error in Firebug console.

Any idea ? Do you test it with 3.0 ?

here is the code I use and the JSON



this.thesearch = new Ext.ux.form.MetaForm({

url:'platform/generic/search.json.jsp?metaClassId='+this.metaClassId

});
{"data":{},"success":true,"metaData":{"fields":[{"allowBlank":true,"name":"code","xtype":"textfield","fieldLabel":null},{"allowBlank":true,"name":"name","xtype":"textfield","fieldLabel":null}]}}



Thanks,

Jerome

jsakalos
8 Oct 2009, 8:47 AM
I haven't ported/tested it in Ext 3.x

huggy06
8 Oct 2009, 9:13 AM
Thanks for your feed back.

Do you plan to do it ?

Jerome

jsakalos
10 Oct 2009, 9:12 AM
Definitely, it's a part of my main project I'm working on.

huggy06
10 Oct 2009, 9:53 AM
Thanks,

When you have more informations, please provide us a solution on ext 3 :)

Regards,

Jerome

vitormlopes
19 Oct 2009, 8:33 AM
Hi... i work with metaform but when i make submit, the field of form can´t return any value... can somebody help me??

code:


function addprodutopedido2(userId,descricao){


var win = new Ext.Window({
id:'metaform-win',
width:800,
height:600,
autoScroll: true,
title:"Proposta - " + userId + " - " + descricao,
modal: true,
items:{
xtype:'metaform',
url:'getFields.do?id_produto=' + userId
,buttons:[{
text:'Guardar'
,handler:function() {
win.items.get(0).getForm().submit({
url: 'apagaProdutoPedido.do',
params: {id_prodped: descricao},
'success': function(form, action){
alert(win.items.get(0).getForm().id);
},
'failure': function(form, action){
alert(win.items.get(0).getForm().id);
}
});
win.close();
}
}]
}
});
win.show();
}




result of post:

id_prodped Conta Outrem - Acidentes Trabalho (Variavel)

i use json string example in 1st page to build form.

thanks

fausastu
22 Oct 2009, 9:43 AM
What is the response from "apagaProdutoPedido.do"? (if you call it directly from the server with the asociated parameters, or in firebug)

jsakalos
22 Oct 2009, 3:22 PM
Ajax submit or standard submit?

NoahK17
26 Oct 2009, 7:38 AM
A port to 3.0 would be ideal :)

NoahK17
26 Oct 2009, 2:44 PM
NM. I spoke too soon. A fix for 3.0.0 was posted a few pages back, and it works perfectly. Thanks again for a great mod Saki!

jmariani
26 Oct 2009, 5:54 PM
I'm returning this JSON:


{"success":true,"metaData":{"fields":[{"name":"MENUID","itemId":"MENUID","fieldLabel":"Id. Men\u00fa","editor":{"xtype":"textfield","allowBlank":false,"required":true}},{"name":"MENUTITLE","itemId":"MENUTITLE","fieldLabel":"T\u00edtulo","editor":{"xtype":"textfield","allowBlank":false,"required":true}},{"name":"ICONCLS","itemId":"ICONCLS","fieldLabel":"Icono","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"MENUPARENTID","itemId":"MENUPARENTID","fieldLabel":"Men\u00fa Superior","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"COMPONENTID","itemId":"COMPONENTID","fieldLabel":"Componente","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"VERSION","itemId":"VERSION","fieldLabel":"Versi\u00f3n","editor":{"xtype":"numberfield","allowBlank":false,"required":true}}]}}

but no form rendered...

Looks like it never runs the "actioncomplete" of the form...

NoahK17
27 Oct 2009, 6:47 AM
I'm returning this JSON:


{"success":true,"metaData":{"fields":[{"name":"MENUID","itemId":"MENUID","fieldLabel":"Id. Men\u00fa","editor":{"xtype":"textfield","allowBlank":false,"required":true}},{"name":"MENUTITLE","itemId":"MENUTITLE","fieldLabel":"T\u00edtulo","editor":{"xtype":"textfield","allowBlank":false,"required":true}},{"name":"ICONCLS","itemId":"ICONCLS","fieldLabel":"Icono","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"MENUPARENTID","itemId":"MENUPARENTID","fieldLabel":"Men\u00fa Superior","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"COMPONENTID","itemId":"COMPONENTID","fieldLabel":"Componente","editor":{"xtype":"textfield","allowBlank":true,"required":false}},{"name":"VERSION","itemId":"VERSION","fieldLabel":"Versi\u00f3n","editor":{"xtype":"numberfield","allowBlank":false,"required":true}}]}}

but no form rendered...

Looks like it never runs the "actioncomplete" of the form...Wow. Mystic posted a fix a few pages back. You move one line of code around and it renders properly.

jmariani
27 Oct 2009, 7:04 AM
I tried mystix's fix and didn't work.

NoahK17
27 Oct 2009, 7:33 AM
I tried mystix's fix and didn't work.Your JSON is incomplete.

You are missing the formConfig and data parts of the required JSON response:


"formConfig":{"labelAlign":"left","columnCount":1,"labelWidth":150,"defaults":{"anchor":"96%"}}},"data":{"null":null}}

jmariani
27 Oct 2009, 8:05 AM
Is formConfig required? Also data? I thought they are optional, because if I have preconfigured the form in the js and not want to load any data, they can be ignored.

I'll try using those.

jmariani
27 Oct 2009, 11:38 AM
Ok. It worked.
IMHO, formConfig and data should be optional.

Anyway, great work Saki!, as usual!.

jmariani
27 Oct 2009, 1:22 PM
Any example on how to use createButtons?

I'm doing this:


xtype: 'metaform',
url: 'lib/bdApp/core/getFormConfigFromDataStore.php',
baseParams: {componentId: this.componentId},
autoHeight: true,
labelWidth: labelWidth,
labelAlign: 'right',
ref: '../thisForm',
createButtons: ['cancel','save']


and no buttons are rendered. Maybe I'm wrong thinking this will render the buttons.

jmariani
27 Oct 2009, 1:26 PM
Never mind:

/**
* Returns the button. This funcion is undefined by default, supply it if you want an automated button creation.
* @method getButton
* @param {String} name A symbolic button name
* @param {Object} config The button config object
* @return {Ext.Button} The created button

Must read comments within the code.

TKU anyway.

jmariani
27 Oct 2009, 2:47 PM
Enlighten me on this:
To implement getButton, I can either write the function within MetaForm code or I can write an override for that. Is there any other way to do it?

TIA!

jsakalos
28 Oct 2009, 2:06 AM
You can do it at the time of instantiation:


new Ext.ux.form.MetaForm({
getButton:function() {....}
// ...
});


or before instantiation



Ext.ux.form.MetaForm.getButton = function() {...};


or override



Ext.override(Ext.ux.form.MetaForm, {
getButton:function() {...}
})

jmariani
28 Oct 2009, 6:43 AM
The lazy version will be:


...
xtype= 'metaform'
getButton: fn()...
...

Right?

Thank you!

jmariani
28 Oct 2009, 4:04 PM
Hi.

I'm installing these two listeners on my metaform config:



xtype: 'metaform',
url: this.configURL,
baseParams: {
componentId: this.componentId,
formWidth: this.width - this.labelWidth,
WWidth: Ext.util.TextMetrics.measure(Ext.getBody(), 'W').width
},
autoHeight: true,
labelWidth: this.labelWidth,
labelAlign: 'right',
listeners: {
'actioncomplete': function(f,a){alert('ok');},
'actionfailed': function(f,a){alert('fail');}
},
//items: [formItems],
ref: '../thisForm',
createButtons: ['save'], //* Valid values are ['meta', 'load', defaults', 'reset', 'save', 'ok', 'cancel'] or any subset of them
getButton:function(buttonName, config){
//* Valid values for buttonName are ['meta', 'load', defaults', 'reset', 'save', 'ok', 'cancel'] or any subset of them
var newConfig;
switch (buttonName) {
case 'save':
newConfig = {
text: 'Grabar',
iconCls: 'database_save',
formBind: true
};
break;
case 'cancel':
newConfig = {
text: 'Cancelar',
iconCls: 'cancel'
};
break;
}
Ext.apply(config, newConfig);

return new Ext.Button(config);
}



And when I save, I return this JSON from PHP:


{"success":true}

The issue is: actionfailed is called, and actioncomplete is never called.

Any clues? TIA!

jmariani
28 Oct 2009, 5:48 PM
Hi.

I configured the metaform like this:


xtype: 'metaform',
url: this.configURL,
baseParams: {
componentId: this.componentId,
formWidth: this.width - this.labelWidth,
WWidth: Ext.util.TextMetrics.measure(Ext.getBody(), 'W').width
},
autoHeight: true,
labelWidth: this.labelWidth,
labelAlign: 'right',
listeners: {
'actioncomplete': function(f,a){alert('ok');},
'actionfailed': function(f,a){alert('fail');}
},
//items: [formItems],
ref: '../thisForm',
createButtons: ['save'], //* Valid values are ['meta', 'load', defaults', 'reset', 'save', 'ok', 'cancel'] or any subset of them
getButton:function(buttonName, config){
//* Valid values for buttonName are ['meta', 'load', defaults', 'reset', 'save', 'ok', 'cancel'] or any subset of them
var newConfig;
switch (buttonName) {
case 'save':
newConfig = {
text: 'Grabar',
iconCls: 'database_save',
formBind: true
};
break;
case 'cancel':
newConfig = {
text: 'Cancelar',
iconCls: 'cancel'
};
break;
}
Ext.apply(config, newConfig);

return new Ext.Button(config);
}


I returning
{"success":true} from PHP, and it always executes 'actionfailed', it never executes 'actioncomplete'

Also: Even if I configure the buttons to be formBind, the button doesn't acts like expected.

Any clue somebody? TIA!

jsakalos
29 Oct 2009, 10:56 AM
The fragment you posted looks good. I use meta form with bound buttons and submitting to server w/o problems. I think that the problem is elsewhere.

jmariani
3 Nov 2009, 3:46 PM
Hi, Saki.

Indeed, the problem was elsewhere. I was not delivering the 'data' part of the JSON.

I modified your code a bit to add listener support to the metaform. So, if in the onMetaChange function you add the following (see //Install Listeners):



// loop through metadata colums or fields
// format follows grid column model structure
Ext.each(meta.columns || meta.fields, function(item) {
if(true === ignore[item.name]) {
return;
}
var config = Ext.apply({}, item.editor, {
name:item.name || item.dataIndex
,fieldLabel:item.fieldLabel || item.header
,defaultValue:item.defaultValue
,value:item.defaultValue
,xtype:item.editor && item.editor.xtype ? item.editor.xtype : 'textfield'
});

// Install listeners
if (item.listeners) {
Ext.apply(config, {
listeners: Ext.util.JSON.decode(item.listeners)
});
}


and in the JSON you deliver:



{"name":"ALIGN","fieldLabel":"Alineaci\u00f3n","defaultValue":"left","selectOnFocus":true,"editor":{"itemId":"ALIGN","ref":"ALIGN","xtype":"lovCombo","width":340,"hiddenName":"ALIGN_LOVVALUE","lovSet":"ALIGN"},"listeners":"{'select':{fn: function(combo,record,index){console.log(record)}}}"}


for instance, it will install the listener and it actually works.

The listeners must be a valid listeners config object as specified in the addListener (http://localhost:8888/ext-3.0.0/docs/output/Ext.util.Observable.html#Ext.util.Observable-addListener) example for attaching multiple handlers at once.

Thank you for this valuable piece of code.

mystik
15 Nov 2009, 9:33 PM
Saki,

We've been using MetaForm for several months now, very happy with it.
But since we recently added some extra functionality, some IE6 and IE7 users are complaining about the dreaded 'slow script' error when closing form tabs.

Our Ext application is built on 5 'master' tabs, and under each tab you have a grid listing. Clicking on a record in that list opens a new subtab under that master tab with the details of the record using MetaForm. For 1 of those master tabs, the subtab itself contains 9 subtabs.

It's a massive customer relations application, that's in use for 9 years now. But since 2009 it's completely converted to ExtJS 2.2.

But due to the 'slow script' errors, we've been trying to port the application to ExtJS 3, which hopefully resolves all the 'slow script' errors due to better destruction of the listeners, traversing arrays, and such.

One of the ExtJS 3 problems is MetaForm. It appears that the Column & Form layout do not mix well together.

E.g. in ExtJS 2.2 MetaForm form elements generate the following html:



<div id="ext-gen324" class="x-panel-body x-panel-body-noheader x-panel-body-noborder" style="height: auto; width: 832px;">
....
<div id="ext-gen352" class="x-form-item" tabindex="-1">
<label class="x-form-item-label" style="width: 150px;" for="ext-comp-1084">Zipcode :</label>
<div id="x-form-el-ext-comp-1084" class="x-form-element" style="padding-left: 155px;">
<input id="ext-comp-1084" class="x-form-text x-form-field" type="text" name="postnr" autocomplete="off" size="20" tabindex="11" style="width: 250px;"/>
</div>
<div class="x-form-clear-left"/>
</div>
....
</div>


But under ExtJS 3, the generated html is,



<div id="ext-gen156" class="x-panel-body x-panel-body-noheader x-panel-body-noborder" style="height: auto; width: 832px;">
....
<input id="ext-comp-1153" class="x-form-text x-form-field" type="text" name="postnr" autocomplete="off" size="20" tabindex="11" style="width: 250px;"/>
.....
</div>


So, apparently it is not correctly adding the form templates (class x-form-item, x-form-item-label and x-form-element.

I'm not sure if any of this helps you, but wanted to provide this information anyway, so that other users will know that this problem exists.

Do you have any idea when you would have a workable (beta) of MetaForm for ExtJS 3 ?

We are willing to provide payment for your development if this helps.

Thanks in advance.

jsakalos
16 Nov 2009, 1:58 AM
Porting MetaForm to Ext 3.x is not at the top of my priorities list, however, it can change. Contact me please on skype (nick is jsakalos) where we can discuss deails.

chrisv
30 Nov 2009, 11:38 AM
Sorry if that is a dumb question or has been asked before, but I'm new to ExtJS and may not have understood correctly everything which has been posted in this thread before...

I have managed to get the MetaForm running successfully (thanks Saki for this useful extension!), fields are loaded and contents are POSTed back to the server as one would expect. Code to create form looks like this:



Ext.onReady(function() {
Ext.QuickTips.init();

Ext.form.Field.prototype.msgTarget = 'side';

var win = new Ext.Window({
id:'metaform-win',
layout:'fit',
width:320,
autoHeight:true,
title:'Ext.ux.MetaForm',
items:{
xtype:'metaform',
url:'/cms/formfields/',
autoHeight:true,
monitorValid:true,
buttons:[{
text:'Cancel',
handler:function() {
alert('cancel');
}
},{
text:'Save',
formBind: true,
handler: function() {
Ext.getCmp('metaform-win').items.get(0).getForm().submit({
clientValidation: true,
url: '/cms/formfields/',
success: function(form, action){
Ext.Msg.alert("success");
}
});
}
}]
}
});

win.show();

});
On first call, the server returns the following JSON (noted here just in case it matters, but again, this part works as expected):


{"data": {}, "success": true, "metaData": {"fields": [{"fieldLabel": "Menu(*)", "name": "menu", "editor": {"xtype": "textfield", "allowBlank": false}}, {"fieldLabel": "Parent", "name": "parent", "editor": {"xtype": "textfield", "allowBlank": true}}, {"fieldLabel": "Title(*)", "name": "title", "editor": {"xtype": "textfield", "allowBlank": false}}, {"fieldLabel": "Link(*)", "name": "link", "editor": {"xtype": "textfield", "allowBlank": false}}], "formConfig": {"columnCount": 1, "labelAlign": "left"}}}After hitting "save" button the backend is called again, and returns the following JSON which I believe is correct to indicate a validation error in "menu" field:


{"errors": [{"msg": "* Bitte eine g\u00fcltige Auswahl treffen. Dies ist keine g\u00fcltige Auswahl.", "id": "menu"}], "data": {"menu": "asd", "link": "asd", "parent": "", "title": "asd"}, "success": false}Unfortunately the error is not shown at the left of the field. If I use the exact same response with a "normal" FormPanel (with statically defined form fields), it will be displayed. What am I doing wrong? I use Ext 3.0.3, if that matters.

chrisv
2 Dec 2009, 9:08 AM
just in case anyone else has the same problem: Adding the following code to the handler of the "Save" button will display field errors:



[...]
Ext.getCmp('metaform-win').items.get(0).getForm().submit({
clientValidation: true,
url: '/cms/formfields/',
success: function(form, action){
Ext.Msg.alert("success");
}
failure: function(form, action) {
if (action.result.errors) {
form.markInvalid(action.result.errors);
}
}
});
[...]

Scorpie
8 Dec 2009, 5:08 AM
Anybody got this ported to 3.x yet?

jsakalos
8 Dec 2009, 6:57 AM
Not me. As I said it's not my priority now.

Scott Murawski
13 Jan 2010, 12:18 PM
I assume the doLayout() can't actually do the laying out when the element is invisible.

In the onMetaChange() function


if(this.rendered && 'string' !== typeof this.layout) {
// this.el.setVisible(false);
this.doLayout();
// this.el.setVisible(true);
}
How do you do similar functionality in Ext 3 which works?

Another fix I found where the window was closed too soon. The server may return an error and the user needs to have a chance to fix the form data.



case 'save':
this.updateBoundData();
this.submit({success : (function () {
this.closeParentWindow();
}).createDelegate(this)});
break;

tiefox
16 Feb 2010, 10:50 AM
Hello, I'm trying to use metaform with more than one form in one page ( one in different ext tabs ), but when I load the second, the fields that are loaded for it appear inside the first form, but the buttons are ok.

Anyone experienced anything like this ?

jsakalos
16 Feb 2010, 10:53 AM
Any single instance of an object (grid, store, whatever)? Ids unique?

semiaddict
26 May 2010, 12:55 AM
Hi,

I'm trying to get a field's value after the form loads.

I've tried to get the value using something like

metaform.getForm().findField('fieldname').getValue() when the metachange event fires, but the value is always empty.

Any ideas on how I can achieve this?

Best

jsakalos
26 May 2010, 12:58 AM
Does the field have value at that time? Do you send values together with metadata?

semiaddict
26 May 2010, 1:13 AM
Hi jsakalos,

Thank you for the lightning-fast reply!

The JSON returned with the url setting of the form looks like this:

{"params": {}, "errors": {}, "data": {"direction": "F", "task": "", "object": 10, "waypoints": "SRID=4326;LINESTRING (2.2412109371880593 41.4097758272518064, 9.1845703112215453 39.2322531371089411, 12.5244140607562464 41.9022770361742047, 11.2939453109281445 44.5591634103447092)", "behavior": "S", "speed": 0.0001}, "success": true, "metaData": {"fields": [{"fieldLabel": "Behavior", "name": "behavior", "editor": {"displayField": "display", "forceSelection": true, "xtype": "combo", "editable": true, "hiddenName": "behavior", "typeAhead": true, "valueField": "id", "mode": "local", "triggerAction": "all", "store": [["S", "Static"], ["L", "LinearMove"], ["B", "BackAndForthMove"]], "allowBlank": false}}, {"fieldLabel": "Object", "name": "object", "editor": {"displayField": "display", "forceSelection": true, "xtype": "combo", "editable": true, "hiddenName": "object", "typeAhead": true, "valueField": "id", "mode": "local", "triggerAction": "all", "store": [["", "---------"], [4, "I #4"], [5, "I #5"], [12, "I #12"], [13, "C #13"], [19, "C #19"], [9, "P #9"], [10, "C #10"], [20, "C #20"], [6, "I #6"]]}}, {"fieldLabel": "Waypoints", "name": "waypoints", "editor": {"xtype": "textfield"}}, {"fieldLabel": "Direction", "name": "direction", "editor": {"displayField": "display", "forceSelection": true, "xtype": "combo", "editable": true, "hiddenName": "direction", "typeAhead": true, "valueField": "id", "mode": "local", "triggerAction": "all", "store": [["F", "Forth"], ["B", "Back"]], "allowBlank": false}}, {"fieldLabel": "Speed", "name": "speed", "editor": {"decimalPrecision": 2, "allowBlank": false, "xtype": "numberfield", "decimalSeparator": ".", "allowDecimals": true}}, {"fieldLabel": "Task", "name": "task", "editor": {"xtype": "textfield", "maxLength": 100}}], "formConfig": {"columnCount": 1, "labelWidth": 80, "defaults": {"width": 130}, "labelAlign": "left"}}}

I'm trying to access the value of the waypoints field, which should be SRID=4326;LINESTRING (2.241210937188059.... with this JSON.
The field is populated with the correct value, but I can't seem to access its value with the metachange event. Maybe I should be using a different event?

Best

jsakalos
26 May 2010, 1:44 AM
Try to get the value from Firebug console after the form is loaded. If you're able to get the value from FB then metachange event is "just too early".

semiaddict
26 May 2010, 1:53 AM
I don't know how to use FB's console to get the value of the field...
If the metachange event is too early, which event should I be using?

Thank you.

jsakalos
26 May 2010, 1:55 AM
I don't know how to use FB's console to get the value of the field...

You MUST learn that before anything else. Firebug is the main Ext JS developer tool - you cannot live without it.

semiaddict
26 May 2010, 2:31 AM
You MUST learn that before anything else. Firebug is the main Ext JS developer tool - you cannot live without it.

Indeed, it is very useful. I didn't know you could execute js code from the console.
When I try to get the value of the field from code executed from the console, I see the form built, but not yet populated with the values when the metachange event is called.

Would you know which event I should be using instead?

semiaddict
26 May 2010, 3:57 AM
I managed to get what I wanted by sending the entire result (action.result) to onMetaChange and then sending it to both beforemetachange and metachange events. This allows me to get the data part of the JSON response.
Here are my changes:


this.onMetaChange(this, action.result); on line 354 instead of
this.onMetaChange(this, action.result.metaData);


onMetaChange:function(form, result) {
var meta = result.metaData; on line 430 instead of
onMetaChange:function(form, meta) {


if(false === this.fireEvent('beforemetachange', this, result)) { on line 431 instead of
if(false === this.fireEvent('beforemetachange', this, meta)) {

and
this.fireEvent('metachange', this, result); on line 528 instead of
this.fireEvent('metachange', this, meta);

semiaddict
25 Jun 2010, 2:52 AM
Hi,

I'm having an issue with HTML returned in the errors and data objects.

For the errors object, if I don't escape html tags, I get the Firebug error "missing } after property list"
But if I do escape the html tags, then the tags are displayed in the error's tooltip.

21112

As for the data object, if I don't escape html tags (in my case it's for an htmleditor field), the form loads just fine, but after saving I get the same error as above.
If I do escape the html tags, the form loads and saves fine, but the tags are visible in the htmleditor field.

21113

Any ideas of how I should be handling html tags in the json response?

jsakalos
25 Jun 2010, 3:54 AM
First, I do not think that this behavior is recordform specific. Second, I think that error messages were never meant to contain html so you'll most likely need to delve into the Field code and unescape messages therein.

semiaddict
25 Jun 2010, 4:25 AM
Thank you jsakalos.

Removing html from errors seems to fix my first problem. Thank you. For some reason I thought errors needed to be in a ul list.

What do you mean by recordform? Did you mean metaform, or is there a new form type called recordform?

jsakalos
25 Jun 2010, 8:14 AM
Sorry, typo, sure I've meant metaform - recordform is another extension of mine.

bkraut
29 Mar 2011, 1:22 PM
Hi,

I successfully used MetaForm in my project, but here I ran into a question. Can I somehow configure MetaForm a little more complex? With columns, tabs, etc...
I need a little more as just a set of fields.

Best regards,
Bojan

jsakalos
30 Mar 2011, 2:28 AM
MetaForm is intended to be simple so the current version does not allow you to config that. Stay tuned, next version to come.

mirws
3 May 2011, 6:56 PM
Hi Saki...
I want to use this plugin in Ext 4, What I have to do to make this plugin work in Ext 4??
Or may be you have been release update version for Ext 4 ????

jsakalos
6 May 2011, 2:13 AM
It needs to be ported to Ext 4 and if there are more users needing that I'll port it. Currently, it is at the bottom of my "porting list".

radustefan
21 May 2011, 2:58 PM
This is a very important plugin for ExtJS. Saki please port it to ExtJS 4.

Ferny
16 Jun 2011, 2:52 AM
Please port it to ExtJs 4.0 :)

Ferny
7 Jul 2011, 1:24 AM
News?

Ferny
11 Jul 2011, 2:04 AM
jsakalos, please help me i really need of this plugin....

ThierryCor
23 Sep 2011, 7:29 AM
Great extension...
thx

can't wait till it"s ported to Extjs 4

ThierryCor
27 Oct 2011, 6:45 AM
There's a problem in using a textarea when there are cr lf in the text a user typed...
they should be replaced by \n instead
now when the data is uploaded i get a json error

i'm a newbee.. can anyone help on where i should modufy the code to capture this error


thx

duvalu10
31 Mar 2012, 4:54 PM
Hello, any plans to port this to EXJS 4 anytime soon?

to_utopia
7 Mar 2013, 11:51 PM
it's a classic extension plugin.
Many application need it, expect this plugin for supporting Extjs 4
Thanks for your job.