Как работает помощник по замене руля?

Фасетный поиск вызывает у меня проблемы, когда имя фасета включает специальные символы, в частности /, ( и ). Я пытаюсь заменить специальные символы, используя помощники руля, встроенные в Stencil. Я продолжаю получать ошибку 500 каждый раз, когда использую помощник руля replace.

пример документации npm:

{{replace "Liquid Snake" "Liquid" "Solid"}}

Даже используя именно этот фрагмент кода (простые строки, а не переменные), я получаю ошибку 500.

Вот журнал:

Debug: internal, implementation, error 
TypeError: Uncaught error: options.inverse is not a function
at Object.<anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/helpers/replace.js:19:28)
at Object.template.1 (eval at <anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/index.js:71:44), <anonymous>:11:72)
at Object.prog [as fn] (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/handlebars/dist/cjs/handlebars/runtime.js:193:15)
at Object.<anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/helpers/if.js:85:28)
at Object.template.main (eval at <anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/index.js:71:44), <anonymous>:70:35)
at Object.ret [as components/faceted-search/facets/multi] (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/handlebars/dist/cjs/handlebars/runtime.js:159:30)
at Object.<anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/helpers/dynamicComponent.js:32:50)
at Object.template.7 (eval at <anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/index.js:71:44), <anonymous>:33:109)
at Object.prog [as fn] (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/handlebars/dist/cjs/handlebars/runtime.js:193:15)
at Object.<anonymous> (/Users/theuser/.nvm/versions/node/v4.4.0/lib/node_modules/@bigcommerce/stencil-cli/node_modules/@bigcommerce/stencil-paper/helpers/if.js:85:28)

person dtrzn    schedule 22.04.2016    source источник


Ответы (1)


Я думаю, вы смотрите документацию по неправильному помощнику replace. Вспомогательная библиотека, которую вы используете, взята из BigCommerce, а ее replace помощник — это Помощник по блоку Handlebars. Способ использования:

{{#replace "Liquid" "Liquid Snake"}}Solid{{/replace}}

Редактировать

Спасибо, что указали, что я неправильно заключил строку замены в моем примере в скобки для усов. Я заменил {{"Solid"}} на Solid в своем исходном блоке кода, так что пример теперь правильный.

Что касается вашего продолжения об отсутствии вывода, когда заменяемая строка (игла) не найдена в целевой строке (стоге сена): оказывается, это спроектированное поведение помощника. Я проверил исходный код и могу подтвердить, что он реализует следующие правила:

  • Если стог сена содержит иголку, верните стог с заменой всех экземпляров иглы.
  • Если в стоге сена нет иглы, вернуть ветвь else помощника.

Это означает, что если мы хотим отобразить какие-либо выходные данные, такие как исходный стог сена, когда в стоге сена нет совпадений с иголкой, мы должны сделать это с помощью ветки else в нашем шаблоне:

{{#replace "Liquid" "Liquid Snake"}}Solid{{else}}Liquid Snake{{/replace}}

По правде говоря, это кажется довольно неуклюжей реализацией этого помощника.

person 76484    schedule 18.06.2016
comment
Спасибо, похоже, они обновили свою документацию. - person dtrzn; 23.06.2016
comment
Однако он по-прежнему не работает. Этот код выводит Solid Snake: {{#replace Liquid Liquid Snake}} Solid {{/replace}} Но если строка не найдена в стоге сена, вывод вообще не производится. - person dtrzn; 23.06.2016
comment
@dtrzn: Спасибо, что указали на мою ошибку. Я отредактировал свой ответ, добавив информацию о том, что происходит, когда иголка не найдена в стоге сена. - person 76484; 24.06.2016
comment
Спасибо, это только что помогло с конечной точкой образца SKU продукта, которую я звонил. Независимо от того, сколько раз вы передаете что-то не-программистам RE: называя вещи, они никогда не понимают этого, поэтому нам нужно заменить хаки во внешнем интерфейсе... - person MrMesees; 12.12.2017