これはいかがですか? :
var Toolbar = {
init: function(toolbar) {
this.Bar = $(toolbar); // scope is Toolbar object literal
this.trigger =
function() { this.Bar.trigger.apply(this.Bar, arguments); };
this.bind = function() { this.Bar.bind.apply(this.Bar, arguments); };
this.Bar.find('clearButton').click(function() {
this.trigger('clear');
}
};
Toolbar.init();
Toolbar.bind('clear', function() { ... });
必要に応じて、折り返しを処理する機能を簡単に作成できます。あなたが好むように、これらのいずれかを、:
前者が後者は、前者はどんな
this.Bar
のラッパーに
this
を行いますということで差は、現在ある(
wrapperitize(this, 'Bar', 'trigger', 'bind')
として
wrapperitize(this, this.Bar, 'trigger', 'bind')
、後者として呼び出されます
function wrapperitize(wrapper, wrappee, method /*, more_methods...*/)
{
wrapper[method] = function() { wrappee[method].apply(wrappee, arguments); };
for(var i = 3; i < arguments.length; ++i)
wrapperitize(wrapper, wrappee, arguments[i]);
}
function wrapperitize(wrapper, wrappeeProp, method /*, more_methods...*/)
{
wrapper[method] = function()
{
wrapper[wrappeeProp][method].apply(wrapper[wrappeeProp], arguments);
};
for(var i = 3; i < arguments.length; ++i)
wrapperitize(wrapper, wrappeeProp, arguments[i]);
}
this.Bar
が今まで将来的になるかもしれません何のためのラッパーにthis
を行います。
(注、方法によって、再帰のほんの少し。これは、閉鎖はJavaScriptで仕事のやり方に、問題の変数捕捉を避けるためです。 )
「init」に何かを渡すべきではありませんか?とにかく、私は、エラーメッセージは "なぜそれが動作しない"についてかなり明確にすべきだと思います。最低でも、*それらを投稿に含める*。 –
私の質問を訂正し、 'init()'呼び出しにjQueryオブジェクトを含めるのを忘れました。私が「うまくいきません」と言うと、オブジェクトリテラルはイベントを発生させるようには見えません(DOMオブジェクトではないので意味があります)。 –