Вопрос

Я работаю с шаблоном руля.

{{#if itemSelected "SomeItem"}}
    <div>This was selected</div>
{{/if}

куда itemSelected это зарегистрированный помощник, как это:

Handlebars.registerHelper("itemSelected", function(item) {
    var selected = false;
    // Lots of logic that determines if item is selected
    return selected;
});

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

{{#if myValueInContext}}
    <div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}

Но я не могу понять, как справиться с первым примером. Может быть, я подхожу к этому неправильно.

Кстати, я пометил эти усы, так как я не мог добавить тег руля к вопросу.

Это было полезно?

Решение

Я не думаю, что это сработает. Если я понимаю правильную документацию на руле, #IF является зарегистрированным блок-заседанием и не принимает другого зарегистрированного помощника в качестве аргумента.

Согласно документации, вы можете реализовать это так


Handlebars.registerHelper('ifItemSelected', function(item, block) {
  var selected = false;
  // lots of logic that determines if item is selected

  if(selected) {
    return block(this);
  }
});

После этого вы сможете позвонить это с


{{#ifItemSelected SomeItem}}
    This was selected
{{/ifItemSelected}

Но вы должны убедиться Какой -то имеет правильный формат. Я не вижу способа использовать зарегистрированный обработчик в качестве условного в случае IF.

Другие советы

Вы должны добавить скобки вокруг встроенного вспомогательного вызова:

{{#if (itemSelected "SomeItem")}}
    <div>This was selected</div>
{{/if}

Я провел эксперименты и проверил, что это просто работает.

Не уверен, упоминается ли это в документации на руле. Я узнал трюк из примеров Руля-лаки.

С последней версией (1.0.rc.1) руля, вы должны написать STH, как:

Handlebars.registerHelper('ifItemSelected', function(item, options) {
  var selected = false;
  // lots of logic that determines if item is selected

  if (selected) {
    return options.fn(this);
  }
});

т.е. Блок (это) заменяется Options.fn (это)

http://handlebarsjs.com/block_helpers.html#conditionals

Если вы хотите иметь вариант и другой, вам понадобится этот код:

Handlebars.registerHelper('ifItemSelected', function(item, options) {
  var selected = false;
  // lots of logic that determines if item is selected

  if (selected) {
    return options.fn(this);
  }
  else {
   return options.inverse(this);
 }
});

Используется с:

{{#ifItemSelected SomeItem}}
    This was selected
{{else}}
    This was not selected
{{/ifItemSelected}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top