私はたくさん検索しましたが、それでもわかりません。これが私がやりたいことをするための最良の方法です。私はjQueryプラグインを書いていますが、それはすでに機能していましたが、これを書いている間にもっと多くの関数を知るようになったので、今はコードを改善したいと思っています。
基礎として、私は公式のjQueryページhttp://docs.jquery.com/Plugins/Authoring(プラグインオプション)からコードを取得しました
jQueryのコードはすでに私の質問に十分なので、ここでは自分のコードを使用しません
(function( $ ){
var methods = {
init : function( options ) {
var defaults = {
value1: '',
value2: ''
};
var options = $.extend(defaults, options);
return this.each(function(){
value3 = $(this).parent();
});
},
log : function( ) {
console.log(value3);
console.log(defaults.value1);
}
};
$.fn.my_plugin = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
これが私のプラグインの構造です。今は非常に剥ぎ取られています;)今私はこのような何かをしたいです:
$('#element1').my_plugin({value1 : 1, value2 : 2});
$('#element2').my_plugin({value1 : 3, value2 : 4});
今、私はコンソールに値を記録したいと思います(私が実際にやりたいこととは正確には異なりますが、私の質問ではそれで十分です)
さらにこのような機能を使いたい
$('#element1').my_plugin('log');
$('#element2').my_plugin('log');
これが私の最初の問題です。log関数にimがある場合、init関数から変数を取得するにはどうすればよいですか?それを行うための最良の方法は何ですか?
私は次のように値をグローバルに設定しようとしました:
(function( $ ){
var defaults = {
value1: '',
value2: ''
};
var methods = {
init : function( options ) {
return this.each(function(){
value3 = $(this).parent();
});
},
log : function( ) {
console.log(value3);
console.log(defaults.value1);
}
};
しかし、これを行って使用すると$('#element1').my_plugin('log');
、2番目の初期化からのみデフォルトを取得します$('#element2').my_plugin({value1 : 3, value2 : 4});
それで、ここに私の2番目の質問があります:各initに特定の変数をどのように使用できますか?
私が知りたいことがはっきりしていることを願っています。私はまだjQueryを学び、最善を尽くして、この構造の問題を解決する方法をたくさん探しました。この構造を使用したいのは、これがjqueryの公式の構造であり、正しいことを行うのが大好きだからです:P
すぐにここでいくつかの答えを見たいです:)
助けてくれてありがとう、
ジュリアン
誰かが基本的なプラグイン構造に興味を持っている場合-これが私のプラグインに今使用しているものです:)
(function( $ ){
var methods = {
init : function( options ) {
console.log('init');
var defaults = {
value1: '',
value2: ''
};
var options = $.extend(defaults, options);
return this.each(function(){
var $this = $(this);
var data = $this.data('test');
var parent = $this.parent();
var element = $this;
if (!data) {
var data = {};
$.each(options, function(key, value) {
data[key] = value;
});
data["parent"] = parent;
data["element"] = element;
$this.data('test', data);
}
$this.test('log');
});
},
log : function() {
console.log('log');
return this.each(function(){
var $this = $(this);
var data = $this.data('test');
console.log(data);
});
}
};
$.fn.test = function( method ) {
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.test' );
}
};
})( jQuery );