0

次のように、ネストされたオプションのデフォルトを定義したいと思います。

$("div").filters({
          url     : 'url.example.com'
          filters : {
              'projects'    : {
                    'type'  : 'dropdown',
                    'min'   : 1,
                    'max'   : 10,
                    'htmlOptions': {
                         'name' : 'projects',
                         'class': 'filters',
                         'id'   : 'project-filter',
                     }                          
               },
               'another'    : {
                    'type'  : 'dropdown'
               }
               ...
          }
});

jQuery を使用$.extend()して、これらをプラグイン コードのデフォルトと次のようにマージします。

settings = $.extend(defaults,options);

私のコードは大きすぎるので、ここにすべてを入れることができます。

私が抱えている問題はそれが機能することですが、開発者がここに配置したいフィルターの数がわからないためsettings.url、同じことを行う方法がわかりません。settings.filters

誰かがこれに対処するより良い方法を提案できますか?

私は立ち往生しています。ありがとうございました

4

1 に答える 1

1

開発者がフィルターに好きな名前を付けられるようにしたいので、特定のフィルターごとにデフォルトを設定したくないと思います (フィルターの名前はわかりません!)。

ただし、 filtersのデフォルトの空のオブジェクトを設定する必要があります。したがって、デフォルトは次のようになります。

var defaults = {
    url : '',
    filters: {}
};

ここで、マージ後、フィルターオブジェクトを繰り返し処理して、渡されたフィルターがあるかどうかを確認する必要があります。

この SO の質問を参照してください: iterating-a-javascript-objects-properties-using-jquery

したがって、次のようなものが必要です。

$.each(settings.filters, function(filterName, value) {
    alert(filterName + ": " + value);
});

値はフィルター オブジェクト {}

この各ループを使用して、フィルター オブジェクト内のすべてのプロパティにアクセスできます。

ただし、開発者がフィルターの一部のプロパティのみを初期化できるようにする場合は、例のように、別のフィルターにタイプのみが指定されている場合、デフォルトのフィルター プロパティのセットで各フィルターを拡張する必要があります。

于 2012-05-16T18:12:34.630 に答える