Я пытаюсь понять что-то, что, я уверен, довольно обычное в метеоре, то есть с использованием реактивных вычисленных значений. Вот простой пример того, что я пытаюсь добиться. Код не работает, но он выглядит примерно так, как я ожидал, может работать. Я использую AUTOFORM для схемы валидацийДинамические расчетные значения в шаблонах метеоров
Schema = {}
Schema.calcs = new SimpleSchema({
a: {type: Number},
b: {type: Number}
});
Template.Calcs.helpers({
total: function() {
var a = Autoform.getFieldValue('calcs', 'a')
var b = Autoform.getFieldValue('calcs', 'b');
// Would be nice if I could do something like this instead of the above
// var a = this.Autoform.a;
// var b = this.Autoform.b;
return a + b;
},
totalDouble: function() {
var total = this.total; // This doesn't work
return total * 2;
}
});
Шаблон выглядит что-то вроде:
<template name='calcs'>
{{> quickForm id="calcs" schema="Schema.calcs" validation="keyup"}}
<ul>
<li>Total: {{total}}</li>
<li>Double Total: {{totalDouble}}</li>
<ul>
</template>
У меня есть 3 вопроса:
- Как получить значение другого помощника в коде?
- Есть ли более чистый способ, чем
Autoform.getFieldValue(...)
, чтобы ввести введенные значения в помощнике? - Действительно ли это лучший способ добиться того, что я хочу с помощью Meteor?
Это на самом деле тестовый проект я мигрирующие из Эмбер, и поведение я после того, как реализован в контроллере Ember (за исключением проверки), как это:
App.CalcsController = Ember.Controller.extend({
a: null,
b: null,
total: function() {
return this.get('a') + this.get('b');
}.property('a', 'b'),
totalDouble: function() {
return this.get('total') * 2;
}.property('total')
});
Прежде всего, this.total является функцией, вы можете захотеть добавить отсутствующую скобку. – Salketer
Является ли это функцией? Вот что я спрашивал. Насколько я вижу, «this.total» вообще не существует ... – aquavitae
есть грязный хак, если вы используете железный маршрутизатор, вы можете указать return this.total = a + b, а затем вы можете получить к нему доступ от других помощников –