ExtではJavaScriptおよびJSONを便利に利用するためのユーティリティを提供しています。
var person = {
name: 'John Smith',
age: 30
};
Ext.apply(person, {
hobby: 'Coding',
city: 'London'
}); // オブジェクトリテラルpersonに"hobby"と"city"を追加
var person = {
name: 'John Smith',
age: 30,
hobby: 'Rock Band'
};
Ext.applyIf(person, {
hobby: 'Coding',
city: 'London'
}); // "hobby"はコピーされない
これらのメソッドはJSONデータをGETメソッドに渡す文字列に変換(あるいは文字列からJSONに戻す)ときに便利なメソッドです。
var params = {
foo: 'value1',
bar: 100
};
var s = Ext.encode(params); // 文字列sはfoo=value1&bar=100
var s = 'foo=value1&bar=100'; var o = Ext.decode(s); // オブジェクトoは"foo"と"bar"の2つのプロパティを持つ alert(o.bar);
Ext Coreでは配列やその他のデータ集合を扱うためのメソッドを提供しています。
Ext.each([1, 2, 3, 4, 5], function(num){
alert(num);
});
var arr1 = Ext.toArray(1); // arr1 = [1]; // arr2 はExt.CompositeElementからExt.Elementの配列に変換される。 var arr2 = Ext.toArray(Ext.select('div));
JSONは"JavaScript Object Notation"を略したものです。JSONはJavaScriptのオブジェクトリテラルのような姿をしていて、主にデータの送受信のためのフォーマットとして利用されています。サーバーとデータをやり取りする際には、JavaScript側で処理可能な形に変換(あるいはその逆)をする必要があります。以下のヘルパーメソッドはこれらの変換処理を行ってくれます。JSONに関する詳しい情報についてはjson.orgをご参照ください。
var s = Ext.encode({
foo: 1,
bar: 2
}); //変数sには文字列'{foo=1,bar=2}'が格納される
var s = '{foo=1,bar=2}'; var o = Ext.decode(s); 変数o"foo"と"bar"の2つのプロパティを持つオブジェクト
Extはクロスブラウザー対応ですが、それでも時には開発者自身がクロスブラウザー対応のためのコードを書く必要が発生します。Extではそういった用途に必要なブラウザーの種類を検知する機能を提供しています。この検知機能はJavaScriptだけではなくCSSでも提供されていて、クロスブラウザー対応にとって大変便利な機能となっています。
以下のJavaScriptによるブラウザー検知機能が利用可能です:
if(Ext.isIE){
// IE特有の処理をここに書く
}
CSSにおいても同じような仕組みで、実行環境に合わせたCSSのクラスがルート要素やbodyタグに付加されます。 この機能によりブラウザ毎のスタイリング方法の違いを比較的簡単に吸収することが可能となります。例えば、"stric mode"の場合には、"ext-strict"というクラスがルート要素に付加され、その他の下記のクラスはbodyタグ以下の要素に必要に応じて付加されることになります:
/* Safariで"strict mode"の場合に、"font-size"を変更 */
.ext-strict .ext-safari .sample-item{
font-size: 20px;
}
JavaScriptは弱い型付けの言語であるため、変数のデータタイプについて調べる必要が頻繁に発生します。Extではデータタイプを検知するためのメソッドを提供しています:
alert(Ext.isEmpty(''));
alert(Ext.isArray([1, 2, 3]));
alert(Ext.isObject({}));
alert(Ext.isFunction(function(){
}));
var s = Ext.id(null, 'prefix'); // Ext.Elementは指定しない var s = Ext.id(Ext.get(document.body)); // bodyタグにIDを付与