// Extension to a normal SmartClient TextItem, that extracts a sub-field from a xxxLangs object of a certain language isc.defineClass("LangTextItem", "TextItem"); isc.LangTextItem.addClassProperties({ DEFAULT_DISPLAY_FORMATTER: function (value, field) { if((typeof value == 'undefined') || (typeof value[formItemLanguage] == 'undefined')) { return ""; } return value[formItemLanguage][field.subField]; } }); isc.LangTextItem.addClassProperties({ DEFAULT_SORT_NORMALIZER : function (recordObject, fieldName, context) { var value = recordObject[fieldName]; return isc.LangTextItem.DEFAULT_DISPLAY_FORMATTER(value, context.getField(fieldName)); }, DEFAULT_FORMAT_CELL_VALUE: function(value, record){ return isc.LangTextItem.DEFAULT_DISPLAY_FORMATTER(value, this); }, DEFAULT_GET_GROUP_VALUE: function(value, record, field, fieldName, grid) { return isc.LangTextItem.DEFAULT_DISPLAY_FORMATTER(value, field); } }); isc.LangTextItem.addProperties({ subField: null, mapDisplayToValue : function (value) { if(isc.isAn.Object(this._value)) { if(this._value[formItemLanguage]==null) this._value[formItemLanguage] = new Object(); this._value[formItemLanguage][this.subField] = value; } return this._value; } }); // Define corresponding type isc.SimpleType.create({ name: "langtext", editorType: "LangTextItem", validators: isc.Validator.create({ clientOnly: true, condition: function (item , validator, value) { if (item.required == true) { if(typeof value == 'undefined') { return false; } if(typeof value[formItemLanguage] == 'undefined') { return false; } if (value[formItemLanguage][item.subField] != null && value[formItemLanguage][item.subField] != 'undefined' && value[formItemLanguage][item.subField] != '') { return true; } return false; } else { return true; } }, errorMessage: "Langtext must not be empty!", stopIfFalse: true, type: "custom" }), normalDisplayFormatter : isc.LangTextItem.DEFAULT_DISPLAY_FORMATTER });