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({});

在上面的代码中,{}是一个用于初始化的空对象。在实践中,您可以通过两种方式使用该对象。

关于您的第一个代码片段,您可以将代码添加到该“对象文字”中。

背景过滤器:{类别:['衬衫','鞋子'],部门:['男装'],猫:['我的价值']},

注意添加的逗号,这是一个重要的触发点。这可能符合您的需求,也可能不符合您的需求,具体取决于几个因素。

关于您的第二个代码片段,您可以在运行时成员应用于 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 的String 对象。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 回答