流星模板中的动态计算值

时间:2015-03-06 14:17:21

标签: javascript meteor reactive-programming

我试图抓住一些我确信在流星中非常基本的东西,即使用反应计算值。这是一个我试图实现的事情的简单例子。代码不起作用,但它看起来像我期望的可能工作。我正在使用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个问题:

  1. 如何在代码中获取另一个助手的值?
  2. 是否有比Autoform.getFieldValue(...)更简洁的方式在帮助程序中输入值?
  3. 这实际上是用Meteor实现我想要的最佳方式吗?
  4. 这实际上是一个我正在从Ember迁移的测试项目,我所追求的行为是在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')
    });
    

1 个答案:

答案 0 :(得分:1)

您可以将其存储在会话中:

total: function() {
    var a = parseInt(Autoform.getFieldValue('calcs', 'a'))
    var b = parseInt(Autoform.getFieldValue('calcs', 'b'));
    var total = a+b;
    Session.set("total", total);
    return total;
    },
totalDouble: function(){
    var total = Session.get("total");
    return  total* 2;
}