Saya mencoba memberikan fungsionalitas panggilan balik plugin saya, dan saya ingin itu beroperasi dengan cara yang agak tradisional:
myPlugin({options}, function() {
/* code to execute */
});
atau
myPlugin({options}, anotherFunction());
Bagaimana cara menangani parameter itu dalam kode? Apakah itu diperlakukan sebagai satu kesatuan penuh? Saya cukup yakin saya tahu di mana saya akan menempatkan kode eksekutori, tetapi bagaimana saya mendapatkan kode untuk dieksekusi? Sepertinya saya tidak dapat menemukan banyak literatur tentang topik tersebut.
()
Jawaban:
Jalankan saja callback di plugin:
$.fn.myPlugin = function(options, callback) { if (typeof callback == 'function') { // make sure the callback is a function callback.call(this); // brings the scope to the callback } };
Anda juga dapat memiliki callback di objek opsi:
$.fn.myPlugin = function() { // extend the options from pre-defined values: var options = $.extend({ callback: function() {} }, arguments[0] || {}); // call the callback and apply the scope: options.callback.call(this); };
Gunakan seperti ini:
$('.elem').myPlugin({ callback: function() { // some action } });
sumber
$('.elem').myPlugin({ callback: function (param) { // some action } });
options.callback.call(this, param);
animateBefore
dananimateAfter
. tolong beritahu saya bagaimana menggunakan solusi Anda ??Saya tidak tahu apakah saya memahami pertanyaan Anda dengan benar. Tetapi untuk versi kedua: Ini akan
anotherFunction
segera menelepon .Pada dasarnya plugin Anda harus memiliki fungsi yang terlihat seperti ini:
var myPlugin = function(options, callback) { //do something with options here //call callback if(callback) callback(); }
Anda harus menyediakan objek fungsi sebagai callback, jadi salah satu
function(){...}
atauanotherFunction
(tanpa()
).sumber
Membawa kembali ledakan dari masa lalu.
Perlu dicatat bahwa jika Anda memiliki dua argumen yang diteruskan, misalnya:
$.fn.plugin = function(options, callback) { ... };
Kemudian Anda memanggil plugin tanpa argumen opsi tetapi dengan callback maka Anda akan mengalami masalah:
$(selector).plugin(function() {...});
Saya menggunakan ini untuk membuatnya sedikit lebih fleksibel:
if($.isFunction(options)) { callback = options }
sumber
Saya pikir ini mungkin membantu Anda
// Create closure. (function( $ ) { // This is the easiest way to have default options. var settings = $.extend({ // These are the defaults. onready: function(){}, //Rest of the Settings goes here... }, options ); // Plugin definition. $.fn.hilight = function( options ) { //Here's the Callback settings.onready.call(this); //Your plugin code goes Here }; // End of closure. })( jQuery );
Saya telah membagikan artikel tentang Membuat Plugin jQuery Anda Sendiri. Saya pikir Anda harus memeriksa http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/
sumber
Ubah fungsi plugin Anda untuk mengambil parameter kedua. Dengan asumsi bahwa pengguna melewati suatu fungsi, parameter tersebut dapat diperlakukan sebagai fungsi biasa.
Perhatikan bahwa Anda juga dapat menjadikan callback sebagai properti dari parameter opsi.
Sebagai contoh:
$.fn.myPlugin = function(options, callback) { ... if(callback) //If the caller supplied a callback callback(someParam); ... });
sumber
Contoh agak terlambat, tapi bisa berguna. Menggunakan argumen dapat membuat fungsionalitas yang sama.
$.fn.myPlugin = function() { var el = $(this[0]); var args = arguments[0] || {}; var callBack = arguments[1]; ..... if (typeof callback == 'function') { callback.call(this); } }
sumber