Meteor - Что такое Spacebars.kw {hash: Object}

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

Template.registerHelper('testHelper', function(a, b) {
        console.log(a);
        console.log(b);
})

Я добавил пакет внутри /packages, и в моем клиентском шаблоне, когда я добавил {{testHelper "hello" "meow"}}, консоль регистрировала hello и meow, что я и ожидал.

Когда я добавил {{testHelper "hello"}}, я ожидал, что консоль будет регистрировать hello и null, поскольку в качестве второго параметра ничего не было передано. Но вместо этого он вернул hello и объект - Spacebars.kw {hash: Object}.

Что это Spacebars.kw {hash: Object}? Что мне делать, если я хочу, чтобы вместо этого возвращалось null?


person dayuloli    schedule 03.01.2015    source источник


Ответы (1)


Spacebars.kw содержит hash объект, у которого есть хэш входных параметров.

У Meteor есть два метода сопоставления методов, один - прямое сопоставление, при котором параметры вводятся напрямую, например, {{testHelper "variable1" "variable2" "variable3"}}, будет соответствовать как function(a,b,c) как переменные 1-3, соответствующие до a, b и c соответственно.

Второй метод ввода - использование хеша:

{{testHelper a="variable1" b="variable2" c="variable3"}}

Это даст один параметр для function(a), где a - объект Spacebars.kw.

У объекта Spacebars.kw будет подобъект с именем hash со структурой, которая соответствует:

{ "a" : "variable1",
  "b" : "variable2",
  "c" : "variable3" }

Meteor попытается сопоставить первый параметр напрямую, но последующие параметры будут сопоставлены как хэши, если второй вход будет пустым, например, в случае, когда вы используете {{testHelper 'hello'}}, где b будет иметь значение null, поэтому вместо этого он предоставляется как хеш.

Обычно он задается как this, поэтому, если вы получите b как объект Spacebars.kw, вы можете предположить, что второго ввода не было. В качестве альтернативы вы можете использовать объявления стиля хеширования, а затем напрямую проверить, равно ли значение хеш-функции null:

{{testHelper text="Hello"}}
{{testHelper text="Hello" othertext="Hellooo"}}

и помощник:

Template.registerHelper('testHelper', function(kw) {
    console.log(kw.hash.text);
    console.log(kw.hash.othertext);
});
person Tarang    schedule 03.01.2015
comment
Еще раз спасибо, Акшат, ты звезда! Я следил за объявлениями стиля хеширования, и он отлично работает. У меня есть следующий вопрос, который я опубликую как новый. Кстати, это Spacebars.kw задокументировано? Я не могу найти это в документации, может, мы можем добавить это в документы? - person dayuloli; 03.01.2015
comment
что означает квт? - person Juan Pablo Fernandez; 17.10.2017