【问题标题】:Meteorjs: How can I use variables which are defined in template events inside my template helpers?Meteorjs:如何使用在模板助手中的模板事件中定义的变量?
【发布时间】:2015-06-05 19:26:35
【问题描述】:

这是我的活动代码:

    Template.pricing_report.events({
        'click #btn_report_filter': function(){

        from_date = $("#datepicker1").val();
        to_date = $("#datepicker2").val();


        date_n = new Date(from_date);
        from_iso = date_n.toISOString();

        date_o = new Date(to_date);
        to_iso = date_o.toISOString();
    }

});

我想在我的助手中使用变量from_isoto_iso,如下所示:

Template.pricing_report.helpers({

    'preportdata':function(){
        return price.find();
},

    'preportdata_test':function(){
        return price.find({
            date: {
                $gte: from_iso,
                $lt:  to_iso
            }
        });
}

如您所见,我在 find 函数中使用了 from_isoto_iso,但无法将值传递给辅助函数。

我还尝试在我的辅助函数中使用console.log(from_iso),但它也没有显示任何内容。

那么,我该如何使用这些变量呢?

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    你应该阅读 ReactiveVar:http://docs.meteor.com/#/full/reactivevar_pkg

    快速示例:

    Template.pricing_report.onCreated(function () {
        this.date_n = new ReactiveVar();
    });
    
    Template.pricing_report.events({
        'click #btn_report_filter': function (e, tmpl) {
    
            tmpl.date_n.set(new Date(from_date)); 
    
        }
    });
    
    Template.pricing_report.helpers({
        'helperName':function () {
            var tmpl = Template.instance();
            return tmpl.date_n.get();
         });
    }
    

    【讨论】:

    • 您能否对此进行更多解释,我在理解这个概念时遇到了问题,因为我是流星新手,例如this.date_n = new ReactiveVar(); 做什么做?事件部分发生了什么,助手部分发生了什么?
    • 这都是关于 ReactiveVar 的(如果你需要更多信息,你可以用谷歌搜索它)基本上在“onCreated”生命周期事件中,你想创建新的反应变量,它将存在于你的模板实例上。然后在事件部分,您可以设置反应变量 'tmpl' 的值,这里与 onCreated 事件中的 'this' 相同。您将在此处使用 setter 函数“set()”。接下来在帮助器部分中,您可以使用“get()”函数从反应变量中获取当前值。在 helper 部分,您需要通过 Template.instance() 找到模板实例。
    【解决方案2】:

    您可以使用 Session 变量来存储模板实例变量。它在客户端上提供了一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储列表中当前选定项目之类的内容。在你的情况下,你可以为你的模板尝试这样的事情(未经测试):

    Template.pricing_report.events({
        'click #btn_report_filter': function() {
            var from_date = $("#datepicker1").val(),
                to_date = $("#datepicker2").val(),    
                from = new Date(from_date),    
                to = new Date(to_date);
    
            Session.set("to_date", to);
            Session.set("from_date", from);
        }
    });
    
    Template.pricing_report.helpers({
    
        'preportdata': function(){
            return price.find();
        },
    
        'preportdata_test': function() {
            return price.find({
                date: { 
                    $gte: Session.get('to_date'),
                    $lt:  Session.get('from_date')
                }
            });
        }
    });
    

    【讨论】:

    • 我试过你的代码,但它不起作用,不知道为什么,但 Session.get('to_date') 和 Session.get('from_date') 没有任何价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2015-08-15
    • 1970-01-01
    • 2010-11-26
    • 2015-08-23
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多