handlebars.js - Выбор цикла на основе вспомогательного вывода - PullRequest
0 голосов
/ 15 марта 2019

У меня на странице 2 установлено из loop в моем context.js

set_1: [
    {title: 'Set 1'},
    {title: 'Set 1'},
    {title: 'Set 1'}
],

set_2: [
    {title: 'Set 2'},
    {title: 'Set 2'},
    {title: 'Set 2'}
]

В настоящее время я делаю:

{{#each set_1}}
   {{title}}
{{/each}}

{{#each set_2}}
   {{title}}
{{/each}}

То, чего я хочу достичь, основано на url parameters возможности выбрать, какой установить для отображения. Например: domain.com/?set=1 & domain.com/?set=2 и, исходя из этого, right set будет установлено в loop и показывает, что.

Я попытался создать помощник для него, как показано ниже, но он не выдает ошибку или не показывает содержимое:

function getUrlParam(name) {
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
  return (results && results[1]) || undefined;
}
var s   = getUrlParam('set');
Handlebars.registerHelper('selectSet', function(){
  if (s == 1){
    return 'set_1'
  } else if (s == 2) {
    return 'set_2'
  } else {
    return 'set_1'
  }
});

и на моей html странице я делаю:

{{#each selectSet}}
    {{title}}
{{/each}}

Любая помощь приветствуется и спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Мне удалось добиться этого с помощью встроенной функции lookup, которая handlebarjs имеет следующее:

function getUrlParam(name) {
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
  return (results && results[1]) || undefined;
}
var s   = getUrlParam('set');
Handlebars.registerHelper('selectSet', function(){
  if (s == 1){
    return 'set_1'
  } else if (s == 2) {
    return 'set_2'
  } else {
    return 'set_1'
  }
});

// In my HTML
{{#each (lookup . (selectSet))}}
   {{name}}
{{/each}} 
0 голосов
/ 18 марта 2019

Нет поддержки такой функциональности для цепочки помощников: https://github.com/wycats/handlebars.js/issues/304. Если вы хотите такую ​​вещь, вы должны написать помощник, который будет цеплять результат, полученный первым помощником, ко второму (но забудьте о #каждый).

В посте вы найдете код написания такого помощника:

Handlebars.registerHelper('chain', function () {
    var helpers = [], value;
    $.each(arguments, function (i, arg) {
        if (Handlebars.helpers[arg]) {
            helpers.push(Handlebars.helpers[arg]);
        } else {
            value = arg;
            $.each(helpers, function (j, helper) {
                value = helper(value, arguments[i + 1]);
            });
            return false;
        }
    });
    return value;
});
...