次のように、モデルと単一のコントローラーに名前を付けます。
var MC = {};
必要に応じてプロパティを追加しました。
たとえば、すべてのモデルを初期化するコードは次のようになります。
MC.initAll = function() {
MC.MASettings.init();
MC.MATweet.init();
MC.MUserTry.init();
MC.MUserNew.init();
MC.MUserExist.init();
Su.UserOut.init();
Su.Media.init();
}
これをループに変更する予定です... MC をループして、init() が存在する場合はそれを実行します。
このアーキテクチャについて唯一気になる点は、すべてが公開されているという伝統的な意味でのプライバシーやカプセル化がないことです。
また、モデルをインスタンス化するのではなく、関数として呼び出すだけですが、これは .js でのインスタンス化とほとんど同じです。
モデルにプライバシーを追加し、オブジェクトのプロパティとしてアクセスできるようにする簡単な方法はありますか?
例として、ここに私の最も単純なモデルがあります:
MC.MUserTry = {
init: function() {
document.getElementById( 'ut_but' ).addEventListener( "click", function( ) {
MC.Controller( MC.o_p( 'MUserTry' ) );
}, false );
},
pre : function( o_p ) {
o_p.page.email = document.getElementById( 'ut_but' ).getAttribute( 'data-email' );
return o_p;
},
post : function( o_p ) {
sLocal( o_p.server.hash, o_p.server.privacy, o_p.server.name, o_p.server.picture, 'ma' );
vStateUpdate( o_p.server.name, o_p.server.picture, o_p.server.privacy );
vTPane( o_p.server.tweets ); vBPane( o_p.server.bookmarks );
vFlipP( 'ma' );
}
};
pre() は ajax 呼び出しの前に実行され、post() はその後に実行され、init() は onload イベントなどを介して呼び出されます。
実際にこれを実装するコントローラーは次のとおりです。
MC.Controller = function( o_p ) {
console.log( 'o_p = ' + o_p.model );
var t1, t2, t3, t4,
i1, i2, i3, i4,
o_p_string_send;
if( SU.get('debug') ) {
t1 = new Date().getTime();
}
o_p = MC[ o_p.model ].pre( o_p );
if ( o_p.result !== 'complete' ) {
o_p_string_send = JSON.stringify( o_p );
if( SU.get('debug') ) {
t2 = new Date().getTime();
console.log( '---------------Server Send: \n ' + o_p_string_send );
}
cMachine( 'pipe=' + o_p_string_send , function( o_p_string_receive ) {
if( SU.get('debug') ) {
console.log( '---------------Server Receive: \n ' + o_p_string_receive );
t3 = new Date().getTime();
}
o_p.server = JSON.parse( o_p_string_receive );
MC[ o_p.model ].post( o_p );
if( SU.get('debug') ) {
t4 = new Date().getTime(); i1 = t2-t1 ; i2 = t3-t2 ; i3 = t4-t3; i4 = o_p.server.time;
console.log( '---------------Time: \n Pre | Transit | Post | Server = ', i1, ' | ', i2, ' | ', i3,' | ', i4 );
}
} );
}
};
プライバシーを追加したい。これを行うにはどうすればよいでしょうか? オブジェクト プロパティとしてモデルにアクセスできるように維持するにはどうすればよいですか?
関連している