jquery의 웹 사이트에서 플러그인 제작 지침을 따르고 있지만 동일한 플러그인 내의 다른 메소드에서 기본 플러그인 메소드를 호출하는 방법을 찾지 못했습니다. JQuery와의jquery 플러그인을 제작할 때 다른 플러그인에서 내 플러그인 메소드를 호출하려면 어떻게해야합니까?
(function($){
var methods = {
init: function(options) {
var settings = {};
//this == context element of plugin, already jquery
return this.each(function() {
var $this = $(this);
if(options) {
settings = $.extend({}, settings, options);
}
var data = $this.data('PluginData');
if(!data) {
//set up
}
});
},
some_fn: function() {
//do some stuff
},
another_fn: function() {
//do other stuff, then somehow call some_fn(), maybe via methods.some_fn() ?
}
};
jQuery.fn.SomePlugin = 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 {
console.log('there was an error');
}
};
})(jQuery);
이것은 꽤 많이 골격 코드 :
는이 같은 플러그인을 가지고있다. 그러나, 내가 가진 문제는 내 플러그인 메소드를위한 "유틸리티"기능을 만드는 가장 좋은 방법을 찾는 것입니다. 또는 다른 플러그인 메소드를 호출하는 방법입니다.
예를 들어, 내 플러그인에는 init
, some_fn
및 another_fn
의 세 가지 메소드가 있습니다. $('#el').SomePlugin('another_fn')
으로 전화하시는 경우 another_fn
번에 some_fn
으로 전화하겠습니다. 어떻게해야합니까? 그러나 methods.some_fn()
을 호출하면 작동하지만, 메서드가 메서드 개체 내에 정의 된 순서에 따라 다릅니다. 따라서 some_fn
을 another_fn
으로 부를 수는 있지만 그 반대는 아닌가요?
또한 내 플러그인의 모든 메소드에서 사용할 수있는 유틸리티 함수를 만드는 올바른 방법은 무엇입니까? 그래야 전역 네임 스페이스가 복잡해지지 않을까요? var 메소드를 호출하기 바로 전에 플러그인 시작 부분에 유틸리티 함수를 정의합니까?
편집 : Matt Ball에게 감사 드리며, methods.some_fn()이 다른 주요 메소드를 호출하기 위해 작동하는지 확인했습니다. 이제는 (개인) 유틸리티 함수를 작성하는 가장 좋은 방법이 무엇인지 알고 싶습니다.
내가 [jQueryUI 위젯 팩토리] (HTTP를 사용하여 JQ 플러그인을 쓰기 시작했을 때 : // 위키를. jqueryui.com/w/page/12138135/Widget-factory). 나는 이것이 당신의 질문에 대한 즉각적인 대답이 아니라는 것을 알고 있습니다. 그러나 그것은 한 번 볼 가치가 있습니다. – bfavaretto
_ "... 이것은 메소드가 메소드 객체 내에 정의 된 순서에 따라 다르지만 맞습니까?"_ 사용자가 묻는 것을 이해하면 대답은 ** 아니요 ** 주문에 의존하지 않습니다. –
당신은 맞습니다. 그리고 그것은 methods.some_fn()이 일하는 것 같아서, 제 질문에 대답을합니다. –