Expand my Community achievements bar.

SOLVED

On/Off time(datetime field) doesn't cleared after cancel button is pressed

Avatar

Level 3

HI,

I opened page properties and filled some fields

filled properties

After I pressed cancel button, and reopened properties dialog, all field cleared, but datetime fields didn't.

reopend dialog

What is the rigth way to clear datetime fields?

Thanks.

1 Accepted Solution

Avatar

Correct answer by
Level 3

I was debuggin and find out strange behavior of  isApplyDefault method in \ibs\cq\ui\widgets\source\ext\override\widgets\form\Field.js. It is compare created and modefied date, if they equals returns true, otherwise false.

I just ovveride method processRecord in DateTime.js to remove calling isApplyDefault:

processRecord: function(record, path) { if (this.fireEvent('beforeloadcontent', this, record, path) !== false) { var v = record.get(this.getName()); if (v == undefined && this.defaultValue != null) { this.setValue(this.defaultValue); } else { this.setValue(v); } this.fireEvent('loadcontent', this, record, path); } }

in Field.js it is: 

processRecord: function(record, path) { if (this.fireEvent('beforeloadcontent', this, record, path) !== false) { var v = record.get(this.getName()); if (v == undefined && this.defaultValue != null) { if (this.isApplyDefault(record, path)) { this.setValue(this.defaultValue); } } else { this.setValue(v); } this.fireEvent('loadcontent', this, record, path); } }

View solution in original post

3 Replies

Avatar

Level 10

See the API reference for a DateTime Object:

http://docs.adobe.com/docs/en/cq/5-6/widgets-api/index.html?class=CQ.form.DateTime

If the out of the box xtype is not clearing the way you want - write a custom xtype that uses a DateTime object. Then on the open event of the dialog - call SetValue and pass an empty value - which will clear the field. Then you can set new values each time you open the dialog. 

Avatar

Correct answer by
Level 3

I was debuggin and find out strange behavior of  isApplyDefault method in \ibs\cq\ui\widgets\source\ext\override\widgets\form\Field.js. It is compare created and modefied date, if they equals returns true, otherwise false.

I just ovveride method processRecord in DateTime.js to remove calling isApplyDefault:

processRecord: function(record, path) { if (this.fireEvent('beforeloadcontent', this, record, path) !== false) { var v = record.get(this.getName()); if (v == undefined && this.defaultValue != null) { this.setValue(this.defaultValue); } else { this.setValue(v); } this.fireEvent('loadcontent', this, record, path); } }

in Field.js it is: 

processRecord: function(record, path) { if (this.fireEvent('beforeloadcontent', this, record, path) !== false) { var v = record.get(this.getName()); if (v == undefined && this.defaultValue != null) { if (this.isApplyDefault(record, path)) { this.setValue(this.defaultValue); } } else { this.setValue(v); } this.fireEvent('loadcontent', this, record, path); } }

Avatar

Level 10

Nice observation - thank you for letting us know what you did.