私は、カスタムタイプで計算すると、ExtJSの中でサポートされているとは思いません。任意の関数を任意のクラスに拡張してカスタム計算機能を実装できますが、私はnot sure you can override operators in JavaScriptです。
Ext.define('Ext.data.field.Array',{
extend: 'Ext.data.field.Field',
getType: function() {
return "array"
},
compare: function(o1, o2) {
if (!o1 && !o2) {
return 0
}
if (!o1) {
return -1
}
if (!o2) {
return 1
}
if (o1.length != o2.length) {
return o1.length > o2.length ? -1 : 1
}
for (var i = 0; i < o1.length; i++) {
if (o2.indexOf(o1[i]) == -1) {
return 1;
}
}
return 0
},
convert: function(value) {
if (this.separator && Ext.isString(value)) {
if (value == "") {
value = []
} else {
value = value.split(this.separator)
}
}
if (Ext.isArray(value)) {
if (this.map) {
value = value.map(this.map)
}
return value
}
return []
},
serialize: function(value) {
if (Ext.isArray(value)) {
if (!this.allowBlank) {
value = Ext.Array.filter(value, function(a) {
return a !== ""
})
}
if(this.separator) return value.join(this.separator)
else return value
}
return value
}
});
モデルにおける典型的なフィールドの定義は次のことがあります:
ことができるだろう
{
name: "Names",
type: "array",
allowBlank: false,
separator: ","
}
私はあなたにカスタム型array
の例をあげてみましょう、と述べた
JSON配列またはコンマ区切りの文字列を解析し、サブミットするためにコンマで区切られた文字列にシリアル化するか、
{
name: "Attachments",
type: "array",
}
0 JSON配列を解析し、アレイにシリアライズすることができるであろう
、または
カンマで区切られた文字列を取得し、それが配列を返すように、モデルにそれのすべての部分をマッピングない
{
name: "Categories",
type: "array",
separator:',',
map:function(value) {
return Ext.create('MyApp.model.Category',{value:value});
}
}
モデルの。
この値はソート、シリアライズ、およびデシリアライズを行いますが、レンダリングはしません。レンダリングは型によって行われるのではなく、型を使用するExt.Component
によって行われます。 gridcolumn
またはフォームフィールド。 datecolumn
とdatepickerfield
、numbercolumn
およびnumberfield
(AKA spinner
)、checkcolumn
およびcheckboxfield
という理由があります。
私の配列では、combobox
にmulti:true
の適切なフィールドがありますが、私はカスタムレンダラーを持つカラムが必要です。それでは、arraycolumn
を作ってみましょう:もちろん保証もない現状
Ext.define('MyApp.ux.ArrayColumn',{
extend:'Ext.grid.column.Column',
lines: 6,
renderer:function(value) {
if (Ext.isString(value)) {
value = value.split("\n")
}
var len = value.length;
if (this.lines && len > this.lines) {
value = value.slice(0, lines - 1);
value.push('and {n} more...'.replace('{n}', len - lines + 1))
}
return value.join("<br>");
}
});
すべて、...