0

私は jquery プラグインに取り組んでおり、後で使用するためにプロパティを保存する際に問題が発生しています。以下の例では、コンソール出力は18, 50, 50私が探しているときのものです18, 50, 18. なぜこれが起こっているのか理解していpropertiesますが、複数の異なる方法で使用するために保存する良い方法がわかりません. 非常に明白な何かが欠けているような気がしますが、それが見えていません。

<html>
    <body>
        <h1>Hello</h1>
        <h2>World</h2>

        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
        <script type="text/javascript">
            (function ($) {
                var commonOperations, methods, properties;

                commonOperations = function () {
                    console.log(properties.height);
                };

                methods = {
                    init : function (overrides) {
                        var defaults;
                        defaults = { height: 18 };
                        properties = $.extend(defaults, overrides);

                        commonOperations();
                    },

                    foo : function () {
                        commonOperations();
                    }
                };

                $.fn.myPlugin = 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 for jQuery.myPlugin');
                    }
                };
            }(jQuery));

            $(document).ready(function () {
                $("h1").myPlugin();
                $("h2").myPlugin({ height: 50 });
                $("h1").myPlugin("foo");
            });
        </script>
    </body>
</html>
4

1 に答える 1

2

プラグインの性質にもよりますが、.data()要素ごとにプロパティを保存するために使用するのが理にかなっている可能性があります。

   init: function(overrides) {
     return this.each(function() {
       var defaults = { whatever: "foo" };
       $(this).data('properties', $.extend(defaults, overrides));
     });
   }

次に、他のメソッドは常に要素から「プロパティ」オブジェクトをプルします。

    foo : function () {
      return this.each(function() {
        commonOperations.call(this, $(this).data('properties'));
      });
    }
于 2012-04-05T21:34:33.647 に答える