2017-02-18 20 views
0

Ich habe einen benutzerdefinierten Lenkerhelfer erstellt und erhalte den folgenden Fehler, wenn ich keinen Wert für Parameter definiere.Lenker TypeError: Eigenschaft 'fn' von undefined kann nicht gelesen werden

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; 
} 

Dies funktioniert, wenn ich alle drei Parameter als solche definieren:

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

Wenn ich zeigt „Lenker Typeerror: Kann Eigenschaft‚fn‘undefinierter nicht lesen“ keinen Parameter Konsole definieren.

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

Irgendwelche Ideen, was ich hier falsch mache?

Update: Auch überprüft mit "Null" wie unten vorgeschlagen, aber immer noch gleichen Fehler.

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

Antwort

2

Verwenden Sie null, wo Sie keine Parameter bereitstellen möchten. der folgende Code sollte also funktionieren:

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

Gibt es einen Weg um nicht "Null" zu setzen –

+0

Ich glaube nicht, dass es gibt. Denn mit 'null' sagen Sie der Funktion, dass der Parameter existiert (definiert), auch wenn er keinen Wert enthält. was man mit nichts anderem machen kann (zB 'undefiniert'). so 'null' ist der beste Weg, um herumzukommen, ohne irgendeinen Param zu liefern. – m87

+0

{{# bg-img '' '' ''}} das macht den Trick. Danke für die Hilfe. Als Antwort markiert. –

0

Vielleicht versuchen, Ihre Attribute mit Null zu überprüfen, nicht undefiniert?

+0

Mit Null überprüft undefined immer noch gleichen Fehler. Spuckt immer noch denselben Tippfehler aus. –

1

Sie sollten optionale Parameter in Ihrer Funktionssignatur nicht deklarieren. Handlebars fügt ein Hash-Objekt in das übergebene Optionsobjekt ein, das an Ihre Funktion übergeben wird. Über das Hash-Objekt können Sie auf alle mitgelieferten Parameter zugreifen. Bitte beachten Sie den Abschnitt "Hash Arguments" in der 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 = ''; 
... 
Verwandte Themen