Ich versuche, einen neuen bedingten Helfer für meine Ember-Anwendung zu erstellen. Ist wichtig zu erwähnen, dass ich Ember 1.10.1 benutze, das Lenker 2.0 benutzt und ich kann es nicht aufrüsten, wäre großartig, das Problem mit dieser Version von Ember zu lösen. Bevor ich hier geschrieben habe, habe ich verschiedene Lösungen ausprobiert und den Ember-Code stark debugged. Ich bin der Lösung nahe, aber wahrscheinlich fehlt mir etwas.Erstellen eines bedingten Ember-Helfers
Zunächst einmal habe ich versucht, mit den folgenden Ansatz des Lenkers Dokumentation zu lesen:
Ember.Handlebars.registerHelper('helperName', function(conditional, options) {
if(conditional) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
Und hier die Vorlage:
{{#helperName booleanCondition}}
print true
{{else}}
print false
{{/helperName}}
Alles hat gut funktioniert die fn
Funktion aufrufen, sondern die inversion
Funktion (verwendet, um die Vorlage der Else-Zweig zu rendern) war eigentlich ein Objekt anstelle einer Funktion.
Dann begann ich den Code Ember Debuggen und ich versuchte, den gleichen Ansatz zu folgen, die Ember mit dem if
Helfer verwendet, so landete ich mit dem Follow-up:
Ember.Handlebars.registerHelper('helperName', function(condition, options) {
var permission = Ember.Object.extend({
can: Ember.computed(function() {
return condition;
})
}).create();
Ember.Handlebars.helpers.boundIf.helperFunction.call(this, ["can"], permission, options, options.data.buffer);
});
can
Eigentum ist an die gebunden, wenn , verwendet, um die Vorlage zu ändern, wenn sich die Eigenschaft ändert, da wir die boundIf
Version der if
verwenden (das tut, was ich gerade gesagt habe).
Das Problem dieser Lösung, die imho könnte am nächsten sein, um korrekt zu sein, ist, dass die Eigenschaft nicht korrekt berechnet wird und der Helfer immer den falschen Wert druckt. Ich debuggte wirklich sehr viel, ohne es zu arbeiten, so dass jede Hilfe sehr geschätzt würde und ich hoffe, dass dies für jemand anderen auch nützlich sein könnte.
Versucht, aber ich bekomme 'TypeError: key.indexOf ist keine Funktion', abgesehen davon, möchte ich das Problem mit Lenker zu lösen und nicht HTMLBars, aber vielen Dank für Ihre Antwort! – AndreaScn
Sie haben keinen Lenker. Ember wechselte in '1.10' AFAIK zu HTMLBars. Du hast nie beides! Und dein Fehler ist nicht hilfreich. Wahrscheinlich ist es entweder etwas falsch mit Ihrem Helfer oder irgendwo anders in Ihrem Code. Ich habe den obigen Code ausprobiert. – Lux