1

私はjavascript APIとやり取りしようとしています(これまでにこれを行ったことがないことに注意してください)。私が作業しようとしているものの例は次のとおりです。

SearchSpring.Catalog.init({
    leaveInitialResults : true,
    facets : '.leftNav',
    results : '#results',
    result_layout: 'list',
    results_per_page : 12,
    layout: 'top',
    loadCSS: false,
    filters: {
        color: ['Blue']
    },
    backgroundFilters: {
        category: ['Shirt', 'Shoes'],
        department: ['Mens']
    },
    maxFacets: 5,
    maxFacetOptions: 10,
    sortText: 'Sort By ',
    sortType: 'dropdown',
    filterText: 'Refine Search Results',
    previousText: 'Previous',
    scrollType: 'scroll',
    scrollTo: 'body',
    backgroundSortField: 'price',
    backgroundSortDir: 'desc',
    compareText: 'Compare Items',
    summaryText: 'Current Filters',
    showSummary: true,
    subSearchText: 'Subsearch:',
    showSubSearch: true,
    forwardSingle: false,
    afterResultsChange: function() { $('.pagination').hide(); },
    filterData: function(data) { console.debug(data); }
});

この例では、値を指定してこれに「backgroundFilter」を追加します。

var cat="MyNewCategory";
cat.value="ANewValue;

このカテゴリと値を上記の backgroundFilters: に追加するにはどうすればよいですか?

4

2 に答える 2

1

これは、フレームワークを操作するときの非常に一般的なフレームワークの初期化パターンです。

サンプル コードは、JavaScript オブジェクトをパラメータとしてinit{}という関数に渡しています。()

すべての定義を取り出すと、パターンは次のようになります。

SomeFramework.frameworkFunction({});

上記のコードで{}は、初期化に使用される空のオブジェクトです。実際にそのオブジェクトを操作するには、2 つの方法があります。

最初のコード スニペットに関しては、その「オブジェクト リテラル」にコードを追加できます。

backgroundFilters: { カテゴリ: ['シャツ', '靴'], 部門: ['メンズ'], 猫: ['私の価値'] },

カンマが追加されていることに注意してください。これは重要なトリップ ポイントです。これは、いくつかの要因によって、ニーズに合う場合と合わない場合があります。

2 番目のコード スニペットに関しては、実行時にメンバーを JavaScript オブジェクトに適用できます。私が言いたいのは、あなたの var cat は、渡されている匿名のオブジェクトリテラルに追加できるということです。言うのは難しいですが、単純な概念です。方法は次のとおりです。

//Say this is initialized in some separate way. //There is a bug here I'll describe later.
var cat="MyNewCategory";
cat.value="ANewValue";

//Extract and name the initialization object. It is verbatim at this point.
var initObject = {
    leaveInitialResults : true,
    facets : '.leftNav',
    results : '#results',
    result_layout: 'list',
    results_per_page : 12,
    layout: 'top',
    loadCSS: false,
    filters: {
        color: ['Blue']
    },
    backgroundFilters: {
        category: ['Shirt', 'Shoes'],
        department: ['Mens']
    },
    maxFacets: 5,
    maxFacetOptions: 10,
    sortText: 'Sort By ',
    sortType: 'dropdown',
    filterText: 'Refine Search Results',
    previousText: 'Previous',
    scrollType: 'scroll',
    scrollTo: 'body',
    backgroundSortField: 'price',
    backgroundSortDir: 'desc',
    compareText: 'Compare Items',
    summaryText: 'Current Filters',
    showSummary: true,
    subSearchText: 'Subsearch:',
    showSubSearch: true,
    forwardSingle: false,
    afterResultsChange: function() { $('.pagination').hide(); },
    filterData: function(data) { console.debug(data); }
};

//Now we can add variables (and functions) dynamically at runtime.
initObject.cat = cat;

//And pass them into the framework initialization in a separated way.
SearchSpring.Catalog.init(initObject);

今バグのために。何が意図されているのかわからないため、解決策はわかりませんが、何が間違っている可能性があるかを指摘することはできます。

var cat="MyNewCategory"; cat.value="ANewValue;

このコードは次のとおりです。 1 cat という文字列オブジェクトを作成します。2 値を新しい文字列に変更します。これはあなたが本当に望んでいることだとは思いません。

上記の別の方法で新しい backgroundFilter を追加するには、次のようにします。

initObject.backgroundFilters.cat = ['A', 'B'];

//Line above would give you this type of definition within the initObject (at runtime):
        backgroundFilters: {
            category: ['Shirt', 'Shoes'],
            department: ['Mens'],
            cat: ['A','B']

        },

これが機能するためには、backgroundFilters に関してフレームワークが何を期待しているかによって異なります。

それが役立つことを願っています。ではごきげんよう!ナッシュ

于 2012-06-13T16:43:05.180 に答える
0

よくわかりません。backgroundFilters カテゴリをプレーンな文字列ではなく、構造化されたオブジェクトとして使用しますか? API全体を制御している場合は、次のようなことができます

...
backgroundFilters: {
    category: [
        new SearchSpring.Catalog.Category("Shirt"),
        new SearchSpring.Catalog.Category("Shoes"),
        new SearchSpring.Catalog.Category("MyNewCategory", "ANewValue")
    ],
    department: 'Mens'
}
...
于 2012-06-13T16:13:01.973 に答える