如何在另一种方法中使用jQuery插件init选项?

时间:2012-07-20 03:14:36

标签: jquery plugins

假设这是插件的初始化:

        $(document).ready(function() {
            $("#tree").fname({
                animSpeed: 0
            });
        });

现在,我想调用另一个方法并保持animSpeed值:

$('#tree').fname('expand');

但是,使用我当前的代码,animSpeed值将丢失,并且在expand方法调用中使用默认值(它在init中有效)。我怎么能改变这个?

当前代码:

;(function($){

    $.fn.fname = function(method) {

        var defaults = {
            animSpeed           : 'fast'
        };
        var option = {};

        var methods = {

            init: function(options) {

                option = $.extend(defaults, options);

                return this.each(function() {
                    code...
                });
            },

            expand: function() {
                return this.each(function() {
                    $(this).children('li').slideDown(option.animSpeed);
                });
            }
        };
    };
}(jQuery));

1 个答案:

答案 0 :(得分:4)

您应该将原始选项存储在要调用的元素的data中:

return this.each(function() {
    $(this).data('fname-options', options);
    // Code...
});

以便以后可以通过其他方法访问它:

expand: function() {
    return this.each(function() {
        var $this = $(this),
            options = $this.data('fname-options');

        $this.children('li').slideDown(options.animSpeed);
    });
}