2017-02-18 21 views
0

Я создал специальный помощник handlebars, и я получаю следующую ошибку, когда не определяю значение для параметров.Handlebars TypeError: Не удается прочитать свойство 'fn' undefined

module.exports = function(src, color, classatr, options) { 

    if (typeof src === 'undefined') src = ''; 
    if (typeof color === 'undefined') color = ''; 
    if (typeof classatr === 'undefined') classatr = ''; 

    var bg = '<table class="'+ classatr +'" cellpadding="0" cellspacing="0" border="0" width="100%">\ 
     <tr>\ 
     <td background="'+ src +'" bgcolor="'+ color +'" valign="top">\ 
      <!--[if gte mso 9]>\ 
      <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;">\ 
      <v:fill type="tile" src="'+ src +'" color="#'+ color +'" />\ 
      <v:textbox style="mso-fit-shape-to-text:true" inset="0,0,0,0">\ 
      <![endif]-->\ 
      <div>' 
      + options.fn(this) + 
      '</div>\ 
      <!--[if gte mso 9]>\ 
      </v:textbox>\ 
      </v:rect>\ 
      <![endif]-->\ 
     </td>\ 
     </tr>\ 
    </table>'; 

    return bg; 
} 

Это работает, если я определить все три параметра, как например:

{{#bg-img 'assets/img/hero-header.jpg' '000000' 'my-class'}} 
    <container> 
     <row> 
      <columns> 
      </columns> 
     </row> 
    </container> 
{{/bg-img}} 

Если я не определяю консоль параметр показывает «Рули TypeError: Не удается прочитать свойство„Fn“неопределенных».

{{#bg-img }} 
    <container> 
     <row> 
      <columns> 
      </columns> 
     </row> 
    </container> 
{{/bg-img}} 

Любые идеи относительно того, что я делаю неправильно здесь?

Обновление: также проверяется с помощью «null», как предложено ниже, но все еще такая же ошибка.

if (typeof src === 'undefined' || src === null) src = ''; 
if (typeof color === 'undefined' || color === null) color = ''; 
if (typeof classatr === 'undefined' || classatr === null) classatr = ''; 

ответ

2

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

{{#bg-img null null null}} 
    <container> 
     <row> 
      <columns> 
      </columns> 
     </row> 
    </container> 
{{/bg-img}} 
+0

Есть ли способ обойтись без необходимости «null» –

+0

Не думаю, что есть. потому что с помощью 'null' вы говорите функции, что этот параметр существует (означает его определение), даже если он не содержит никакого значения. которые вы не можете сделать ни с чем другим (т. е. «undefined»). поэтому 'null' - лучший способ обойти без фактического предоставления какого-либо параметра. – m87

+0

{{# bg-img '' '' ''}}, который делает трюк. Спасибо за помощь. Отмечено как ответ. –

0

Возможно, попробуйте проверить свои атрибуты с помощью null, а не неопределенного?

+0

Проверено с помощью null и undefined еще такой же ошибки. Все еще выплевывает тот же самый тип. –

1

Вы не должны объявлять необязательные параметры в своей функции. Handlebars помещает хэш-объект в поставляемый объект объектов, переданный вашей функции. Через хэш-объект вы можете получить доступ ко всем поставленным параметрам. Пожалуйста, обратитесь к разделу «Хэш-аргументы» в разделе Block Helpers Documentation.

module.exports = function(options) { 

var src = options.hash.src; 
var color = options.hash.color; 
var classatr = options.hash.classatr; 
if (typeof src === 'undefined') src = ''; 
if (typeof color === 'undefined') color = ''; 
if (typeof classatr === 'undefined') classatr = ''; 
... 

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

  • Нет связанных вопросов^_^