2012-06-13 2 views
1

Я пытаюсь взаимодействовать с java-скриптом api (в виду, что я никогда не делал этого раньше). Пример того, что я пытаюсь работать с здесь:Запрограммированные параметры конструктора в Javascript

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: перечисленные выше?

+0

Это то, что вы ищете? 'catalog.backgroundFilters.category.push ('MyNewCategory');' –

+0

Это все, что я должен сделать? Как добавить значение. –

+0

Что значит добавить значение? к чему вы добавляете значение? –

ответ

1

Это очень общие рамки шаблон инициализации при работе с рамками.

Ваш пример кода передает объект JavaScript {} в качестве параметра в функцию (), которая называется init.

Принимая все определения картина выглядит следующим образом:

SomeFramework.frameworkFunction({}); 

В приведенном выше коде {} является пустой объект, используемый для инициализации. Есть два способа, которыми вы можете работать с этим объектом на практике.

Что касается вашего первого фрагмента кода, вы можете добавить код в этот «литерал объекта».

backgroundFilters: { Категория: [ 'рубашка', 'Обувь'], универмаги: [ 'мужские'], кошка: [ 'My значение'] },

Обратите внимание на добавленную запятая, это важная точка отключения. Это может или не соответствовать вашим потребностям, в зависимости от нескольких факторов.

Что касается вашего второго фрагмента кода, вы можете применить к объектам 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 создает строковый объект под названием кошки 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.

Надеюсь, что это поможет. Все самое лучшее! Nash

0

Я не совсем понимаю - вы хотите иметь категории backgroundFilters как структурированные объекты, а не простые строки? Если вы контролируете весь API, вы можете сделать что-то вроде

... 
backgroundFilters: { 
    category: [ 
     new SearchSpring.Catalog.Category("Shirt"), 
     new SearchSpring.Catalog.Category("Shoes"), 
     new SearchSpring.Catalog.Category("MyNewCategory", "ANewValue") 
    ], 
    department: 'Mens' 
} 
... 
+0

Медведь со мной здесь .. Что я немного туманный, этот объект является параметром функции, как я ее вижу. Это верно? Можете ли вы рассказать о своем примере, чтобы показать, как настроить код, если новый фоновый фильтр поступает из переменной, а значение этого нового фильтра исходит из другой переменной –

Смежные вопросы