Il valore predefinito per un Manubrio ” modello segnaposto

Posso specificare un valore predefinito per un Manubrio ” modello segnaposto?

<script type="x-handlebars-template" id="menu-edit-form-tpl">
    <form method="{{method}}" action="{{action}}" class="menu-edit-form">
...                     
    </form>
</script>

Posso specificare i valori di default per {{metodo}} e {{azione}} e li saltare in oggetto che viene passato al modello compilato?

InformationsquelleAutor MTVS | 2014-09-01

 

4 Replies
  1. 35

    Manubrio non ha “valori di default”.

    Si dovrebbe usare {{#if}} istruzione per verificare la proprietà è impostata.

    <script type="x-handlebars-template" id="menu-edit-form-tpl">
        <form method="{{#if method}}{{method}}{{else}}POST{{/if}}" action="{{#if action}}{{action}}{{else}}/{{/if}}" class="menu-edit-form">
    ...
        </form>
    </script>

    O se volete un po ‘ più pulita, sintassi, uso il semplice helper:

    Handlebars.registerHelper('safeVal', function (value, safeValue) {
        var out = value || safeValue;
        return new Handlebars.SafeString(out);
    });

    che permette di scrivere come questo:

    <script type="x-handlebars-template" id="menu-edit-form-tpl">
        <form method="{{safeVal method 'POST'}}" action="{{safeVal action '/'}}" class="menu-edit-form">
    ...
        </form>
    </script>
    • Per me funziona solo quando se scrivere {{#if}} invece di {{if}} (sto usando metalsmith)
    • Un’altra opzione è quella di utilizzare o da ember verità aiutanti, dando la sintassi: {{metodo “POST”}} Utilizzando la brace verità aiutanti: github.com/jmurphyau/ember-truth-helpers
    • Ecco perchè odio il Manubrio… si è costretti a creare ‘un semplice helper’ per qualcosa che è stato COSTRUITO IN JS. In JSX {a || b} JustWorks.
  2. 6

    Ecco la mia soluzione semplice

    prima di tutto creiamo un molto di base assistente chiamato ‘scegliere’

        Handlebars.registerHelper('choose', function (a, b) {return a ? a : b;});

    quindi usiamo il modello 🙂

    <p>
    {{choose valueFromData 'default-value-in-template'}}
    <p>

    o, naturalmente, siamo in grado di fare

        <p>
        {{choose valueFromData defaultValueFromData}}
        <p>

    Quindi nel tuo caso:

    <form method="{{choose method 'get'}}" action="{{choose action 'action.php'}}" class="menu-edit-form">
    ...                     
        </form>

    Speranza che aiuta qualcun altro, poiché è in questo 2014 🙂

  3. 6

    Questa domanda e la sua riconosciuta risposta sono abbastanza vecchio e un sacco di nuove caratteristiche e funzionalità sono state aggiunte al manubrio, poiché essi sono stati scritti.

    Sono riuscito a recuperare la funzionalità dei valori di default utilizzando parziale blocchi che sono stati rilasciati in v4.0.0 – in modo che il modello dovrebbe assomigliare a questa:

    <script type="x-handlebars-template" id="menu-edit-form-tpl">
        <form method="{{#> method}}get{{/method}}" action="{{#> action}}index.php{{/action}}" class="menu-edit-form">
    ...                     
        </form>
    </script>

    Allora è solo un caso di passaggio nel vostro method e action come parziali facendo qualcosa di simile a questo:

    var source = $('#menu-edit-form-tpl').html(),
        template = Handlebars.compile(source),
        html = template({}, {
            partials: {
                action: 'contact-form.php'
            }
        });

    Nel codice html risultante il metodo di default get e l’azione sarà contact-form.php. Ecco un lavoro demo:

    JS:

    var source = $('#menu-edit-form-tpl').html(),
        template = Handlebars.compile(source),
        html = template({}, {
            partials: {
                action: 'contact-form.php'
            }
        });
    
    
    //Code below here only to show output.
    document.write('<code>' + $("<div/>").text(html).html() + '</code>');

    HTML:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="x-handlebars-template" id="menu-edit-form-tpl">
        <form method="{{#> method}}get{{/method}}" action="{{#> action}}index.php{{/action}}" class="menu-edit-form">
            ...
        </form>
    </script>

  4. 3

    È possibile registrare un helperMissing helper che verrà chiamato ogni volta che un valore è definito nel modello, ma non nel tuo contesto (utile se non si desidera che i valori mancanti per fallire in silenzio):

    Handlebars.registerHelper("helperMissing", function(context, options) {
        console.error("Template defines {{" + context.name + "}}, but not provided in context");
        return "{{" + context.name + "}}";
    });

Lascia un commento