2012-12-19 2 views
-3

jQuery 플러그인을 만들려고합니다.결과에서 함수로 jquery 플러그인 만들기

$.fn.examplePlugin = function(callback) { 
    $.item = $(this); 
    $(this).hide('fast',function() { 
     callback('bla'); 
    }); 

    function show(a) { 
     alert(a); 
    }  

} 

및 편집 후

+0

이 코드를 어떻게 생각하십니까'$ .item = $ (이)'합니까? 왜냐하면 그것은 정말 나쁜 아이디어 *이기 때문입니다. 그 점에 대해서, 당신이'숨기기 '에 전달한 콜백의 반환 값이 무엇 때문에 사용되는 이유는 무엇이라고 생각합니까? [jQuery API documentation] (http://api.jquery.com)을 읽었습니까? jQuery가 콜백의 반환 값에 대해 아무런 언급을하지 않는다는 것은 확실합니다. 예제 사용에서 플러그인으로 전달하는 함수를 트리거하는 데 아무 것도하지 않았습니다. 뒤로 물러나서 API를 읽고 플러그 - 인 자습서와 소스 코드를 읽고 다시 시도해 보는 것이 좋습니다. –

답변

0

을 경고 '즐'를 반환하는

$('form').examplePlugin(function(data)) { 
    this.show(data); // need to return alert 'bla' 
}); 

필요를 사용, 코드 거의 당신이 할 무슨 뜻한다. 몇 가지 문제가 있습니다 :

  1. 이 줄의 목적은 무엇입니까?

    $.item = $(this); 
    

    당신은 요소를 참조하는 jQuery 오브젝트 (별칭 $)의 필드를 작성하고 있습니다. 플러그인을 N 번 호출하면 해당 필드가 N 번 겹쳐 쓰여집니다. 성취하고자하는 것은 무엇이든, 이것은 그것을하는 방법이 아닙니다.

  2. show 함수는 function(callback) { ... } 클로저 안에서만 사용할 수 있습니다. 외부에서 액세스 할 수 없습니다. this.show을 호출하면 아무 작업도 수행되지 않으며 DOM 요소를 참조하기 때문에 this에 회원을 추가하지 마십시오.

    "적절한"방법은 플러그인 저작물에 대한 자습서를 읽는 것이 좋지만 빠른 해결 방법은 show 함수를 콜백 인수로 전달하는 것입니다.

    $(this).hide('fast',function() { 
        callback(show, 'bla'); 
    }); 
    
    ... 
    
    $('form').examplePlugin(function(show, data) { 
        show(data); // will perform (not return) "alert('bla')" 
    }); 
    
+1

typo :'function (show, data)) {'는'function (show, data) {'여야합니다. –

관련 문제