ile geri çağrıların program aracılığıyla uygulanması Bu yüzden bir web uygulaması yazıyorum. Hemen hemen her şey istemci tarafında yapılır, sunucu ama RESTful bir arayüz. JQuery'yi benim seçim çerçevem olarak kullanıyorum ve kodumu bir Revealing Module Pattern içinde uyguluyorum.JS/jQuery
benim kod tel kafes kabaca şöyledir:
(function($){
$.fn.myplugin = function(method)
{
if (mp[method])
{
return mp[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
else if (typeof method === 'object' || ! method)
{
return mp.init.apply(this, arguments);
}
else
{
$.error('Method ' + method + ' does not exist on $.myplugin');
}
};
var mp =
{
init : function(options)
{
return this.each(function()
{
// stuff
}
},
callbacks : {},
addCallback : function(hook_name, cb_func, priority)
{
// some sanity checking, then push cb_func onto a stack in mp.callbacks[hook_name]
},
doCallbacks : function(hook_name)
{
if (!hook_name) { hook_name = arguments.callee.caller.name; }
// check if any callbacks have been registered for hook_name, if so, execute one after the other
}
};
})(jQuery);
Oldukça basit, değil mi?
Şimdi, uygulama kapsamının dışından olduğu kadar içeriden de (çoklu, hiyerarşik) geri çağrıları kaydedebiliyoruz. Beni rahatsız eden nedir
:
foo : function() {
mp.doCallbacks('foo_before');
// do actual stuff, maybe some hookpoints in between
mp.doCallbacks('foo_after');
}
Uygulamamda içindeki her bir fonksiyon başlangıç ve bitiş olurdu: Mümkün olduğunca genişletilebilir hâle getirmek için, ben bu satırlar boyunca bir şey başvurmak zorunda kalacak bunun gibi. Bu sadece doğru görünmüyor.
Yani, JS sihirbazları SO - ne yapar?
önce ve kancalar sonra başvurmuştur uygulanan görüldü ettik Hemen hemen her eklenti mimarisi: Burada
bir örnek kodudur. Çoğu zaman sadece insanların istediklerini, istedikleri kadarıyla istediklerini uygularsınız. Bildiğim sihirli bir çözüm yok. –Bu, aşırı mühendislik gerektiren bir durum gibi görünüyor. Geri aramalardan önce ve sonra destek almak için kütüphanenizde her _internal_ işlevine gerçekten ihtiyacınız var mı? Raylar, dev bir geri arama sandviçi gibidir ve hatta Rails'deki yöntemlerin sadece% 1'i geri aramaları desteklemektedir. Ayrıca, geri aramaları destekledikleri yerde, tam olarak örnek _foo_ işlevinde özetlediğiniz gibi yaparlar. –