Typeでのコンポーネント取得を実装。
前に検討したTypeでのコンポーネント取得(コンポーネントが持つAPIを条件にコンポーネントを探索し、コンテナから取り出したりインジェクションしたりする機能。)をまったり実装。実装自体はだいたい済んだけどテストは未。簡単なサンプルが動くのは確認。
こんな感じで使えます。コンポーネントの名前は必須ではなくなりました。
var stdout = document.getElementById( "stdout" ); // クラス function Kitten() {} Kitten.prototype = { run:function() { stdout.innerHTML += this.name + " : teku teku" + "<br/>"; }, meow:function() { stdout.innerHTML += this.name + " : meow" + "<br/>"; } }; function Tiger() {} Tiger.prototype = { run:function() { stdout.innerHTML += this.name + " : teku teku" + "<br/>"; }, bite:function() { stdout.innerHTML += this.name + " : gabu" + "<br/>"; } }; // コンテナ var c = new container.Container( function( binder ) { binder.bind( Kitten ).inject({ name:"mii", age:1 }); binder.bind( Kitten ).inject({ name:"kuro", age:2 }); binder.bind( Tiger ).inject({ name:"tora", age:2 }); }); // Typeを使ってコンテナからコンポーネントを取得する。 // "run", "bite"を持つ最初のコンポーネントを取得。 var tora = c.get( container.types.has( "run", "bite" ) ); tora.bite(); // tora : gabu stdout.innerHTML += "---<br/>"; // Typeにマッチするすべてのコンポーネントを取得する。 // runはすべてのコンポーネントが持っているので、mii,kuro,toraすべてがヒット。 var kittens = c.gets( container.types.has( "run" ) ); for ( var i=0; i < kittens.length; i++ ) { kittens[i].run(); }
年内にはリリースしたいところ。テストしないと。