TitaniumにてViewを継承したクラスを作る
TitaniumではViewの生成は
Ti.UI.create~~という専用のメソッドを使うため、prototypeを使った継承などが使えません*1。
ただ用途ごとにViewを継承したクラスを定義していきたかったので、ぱっと見継承したっぽく見せかけるメソッドを用意してみました。
関数
//app.js var root = this; //ViewもしくはWindowなどのUIオブジェクトを継承したクラスを作成 function createViewClass( parentView , props ){ var func = function(){ var view = Ti.UI["create"+parentView]( arguments[0] ); for( var i in props ){ view[i] = props[i]; } if( view['__construct'] ){ view.__construct.apply(view,null); } return view; } return func; } //パッケージを生成。 function createPackage( ns ){ var nsList = ns.split('.'); var currentObj = root; while( n = nsList.shift() ){ if( currentObj[n] == undefined ){ currentObj[n] = {}; } currentObj = currentObj[n]; } }
サンプル
createPackage('toytools.test'); //create extended view(or window) class toytools.test.TestImageView = createViewClass( 'ImageView', { _var1:null, __construct:function( ){ //コンストラクタ //newの時の引数はViewのコンストラクタが持っていってしまうため、引数は持てない //第二引数以降を使うことも考えたけどとりあえず無しで }, setVar:function( var1 ){ this._var1 = var1; }, getVar:function(){ return this._var1; } } ); // var image = new toytools.test.TestImageView({url:'http://k.yimg.jp/images/top/sp/logo.gif'}); var win = Ti.UI.createWindow(); win.add( image ); win.open(); image.setVar('hogehoge'); alert( image.getVar() );
*1:new Ti.UI.ImageView()みたいなことはできない