2015-01-18 17 views
10

Ich möchte einen neuen Parameter an eine Vorlage übergeben, wobei der ursprüngliche Datenkontext beibehalten wird.Parameter an Vorlage übergeben, ohne den Datenkontext zu überschreiben

  • Originaldatenkontext: {Nachricht: "Hallo"} {{> myTemplate withIcon=True}}
  • Datenkontext wird mit {withIcon: True} außer Kraft gesetzt

acually meine Lösung ist es, Daten so zu wickeln.

<code> 
{{> myTemplate originalData=this withIcon=True}} 
</code> 

Gibt es eine bessere Lösung?

Antwort

13

Sie können jederzeit den aktuellen Kontext in einem Helfer erweitern:

Template.parentTemplate.helpers({ 
    iconContext: function() { 
    var result = _.clone(this); 
    result.withIcon = true; 
    return result; 
    } 
}); 

Und es wie folgt verwendet werden: Alternativ

<template name="parentTemplate"> 
    {{> myTemplate iconContext}} 
</template> 

, könnten Sie ein allgemeineres Helfer wie folgt erstellen:

Template.registerHelper('extendContext', function(key, value) { 
    var result = _.clone(this); 
    result[key] = value; 
    return result; 
}); 

Und dann wählen Sie die Schlüssel/Wert-Paare aus dem HTML einer Vorlage:

Jede Lösung ist wünschenswerter als das Verbergen der Originaldaten in einem separaten Feld, da die untergeordnete Vorlage generisch bleibt.

+0

Können Sie bitte ein wenig mehr näher erläutern? Warum musst du _.clone (this) machen? – massimosgrelli

+0

Warum musst du _.clone (this) machen? Was passiert, wenn ich das Ergebnis einem Child-Datenkontext hinzufüge? Etwas wie iconContext: function (childDataLikeMsgPost) {... childDataLikeMsgPost.withIcon = ...} Das würde mir sehr helfen – massimosgrelli

7

Aufbauend auf David's second option für mehrere Attribute ermöglichen:

<template name="parentTemplate"> 
    {{> myTemplate extendContext withIcon=true label="Has Icon" }} 
    {{> myTemplate extendContext withIcon=false label="No Icon" }} 
</template> 

und dann in javascript:

Template.registerHelper('extendContext', function(data) { 
    var result = _.clone(this); 
    _.each(data.hash, function(value, key) { 
    result[key] = value; 
    }) 
    return result; 
}) 
+0

Das ist wirklich nett. –

+2

Das sollte auch funktionieren: 'return _.extend ({}, this, data.hash);' –

Verwandte Themen