2010-04-12 4 views
5

에서 플러그인에 대한 중첩 된 옵션을 수행하지만 방법은 내가 좋아하는 중첩 된 옵션을합니까 : 내가 옳지 않아 그 알고 어떻게 내가 플러그인을 어떻게 해야할지 jQuery를

var defaults = { 
    spacing:10, 
    shorten_to:50, 
    from_start:0, 
    from_end:2, 
    classes: { 
     test:'testing' 
    } 
}; 

, 난 그냥 잘 모릅니다 내가 같은 것을 을 수행 할 때 적절한 구문을 작성하는 방법 :

$('#breadcrumbs').breadcrumbs({classes{test:'new_example'},spacing:12}) 

다른 제안을 환영합니다, 사용자 정의 클래스 이름으로 능력을 필요로하는 메신저와도 7은, 그래서보다는 뭔가를 만들기 test_cla ss, example_class 등 id는 위의 예제와 같이 깨끗하고 깔끔합니다.

답변

2

귀하의 플러그인은 하나의 옵션 매개 변수를 사용하며, 사람들은 객체 리터럴을 사용하여 매개 변수를 플러그인에 전달합니다. 그런 다음 $ .extend를 사용하여 옵션을 기본값과 결합합니다. 다음은 복사 할 수있는 플러그인의 패턴입니다. 내가 그들 모두가 모두 설정되어 있지만 정의되지 않은 하나의 정의 해달라고 경우

//Create closure 
(function($) { 

    var defaults = { //Default settings for breadcrumbs 
     async: false, 
     race: 100, 
     interval: 1, 
     classes: { 
      test:'testing' 
     } 
    }; 

    //Plugin definition 
    $.extend({ 

     //Execute the functions added to the stack 
     breadcrumbs: function(options) { 

      options = $.extend(true, defaults, options); 

      //Loop through each item in the matched set and apply event handlers 
      return this.each(function(i) { 

       //Code here , this = current selection 
      }); 
     } 
    }); 

// end of closure and execute 
})(jQuery); 

당신은 지금과 같이 매우 가까운

$('div').breadcrumbs({async:true, interval:2, classes: {another: true}}); 
+0

나는 그 모든 것을 가지고있다, 나는 어떻게 디폴트를 중첩하는지 궁금했다. :) –

+0

Ok. 업데이트 됨. $ .extend는 'deep extend'를 수행해야합니다. –

+0

끝내 주셔서 고마워요.하지만 유일한 문제는 확장에서 {}을 추가 한 후에 기본값을 변경하지 않습니까? –

3

실제로 맞습니다. 귀하의 표기가 JSON로 알려져 있으며,이

var someobject = { prop: 'prop' }; 
var anotherobject = { name: 'name' }; 
someobject.someproperty = anotherobject; 

는 두 번째 예에서

var someobject = { prop: 'prop', { name: 'name' }}; 

에 해당합니다 (json.org 참조) 매우 간단한 표기법입니다, 당신은 콜론을 놓치고있어.

$('#breadcrumbs').breadcrumbs({classes:{test:'new_example'},spacing:12}) 
+0

덕분에,이 플러그인을 부르지 만 것입니다. 예 : $ ('# top-breadcrumbs'). breadcrumbs ({classes : {breadcrumb_item : 'the_bc'}, delay_time : 100}); 아무 것도 정의되지 않았지만 breadcrumb_item. 나는 정상적인 jQuery 기본 또는 사용자 정의 방법 인 –

+0

@Oscar처럼 작동하도록하고 싶습니다. Jquery의 확장 기능이 James에서 보여준 것처럼 딥 복사가 필요합니다. – Joel

관련 문제