Meteor iron路由器路由的动态查询对象

Meteor iron路由器路由的动态查询对象,meteor,routing,iron-router,Meteor,Routing,Iron Router,我目前的路线如下: Router.route('/:arg', function(){ this.render('tmpResults', { data: function(){ return hcDrefs.find({name: {$regex: this.params.query.q}}) } }); }, {name: 'showSome'}); 如您所见,查询是硬编码的,实际上只接受一个输入(请参见下面的

我目前的路线如下:

Router.route('/:arg',   function(){
    this.render('tmpResults', {
        data:   function(){
            return hcDrefs.find({name: {$regex: this.params.query.q}})
        }
    });
}, {name: 'showSome'});
如您所见,查询是硬编码的,实际上只接受一个输入(请参见下面的方框)。我想做的是执行这个路由,其中查询对象需要是一个变量形式…有时我只需要一个简单的查询,其他时候,查询可能包含AND操作。我目前称此路线为:

    Router.go('showSome', {arg: 1},
              {query: '?q=' + e.target.value});
}
…我想知道的是,我是否可以以某种方式将某种查询对象传递给路由,但我似乎没有找到一种有效的语法…甚至不确定它是否有效。我尝试过一些蛮力的东西,比如定义查询对象:

query_object = {name: {$regex: pattern}}
并试图以某种方式将其传送到路由器,如:

    Router.go('showSome', {arg: 1},
              {query: query_object});
}
//----------------------------------------------------------
    Router.route('/:arg',   function(){
        this.render('tmpResults', {
            data:   function(){
                return hcDrefs.find(this.params.query.q}})
            }
        });
    }, {name: 'showSome'});
但这似乎是不可能的


在生成数据上下文的查询可以是可变形式的情况下,设置路由的数据上下文的好方法是什么?我认为一个全局对象可能会工作,但我好奇的是,有一种更具战略性的方式通过路由器。我仍在翻阅iron router文档,寻找我可以连接到的东西。

没有客户端POST,因此可以传递到客户端路由的数据受到URL中输入内容的限制(类似于GET请求)。所以,不,我不认为有更优雅的解决方案

我认为你有两个选择:

  • 将对象串接到URL中:
  • 路由器.go('showSome',{arg:1}, {query:JSON.stringify(query\u object)}; //---------------------------------------------------------- Router.route('/:arg',function(){ this.render('tmpResults'{ 数据:函数(){ 返回hcDrefs.find(JSON.parse(this.params.query)}) } }); },{name:'showSome'}); 2) 使用全局或会话变量:

    Session.set('query',query\u对象);
    go('showSome',{arg:1});
    //----------------------------------------------------------
    Router.route('/:arg',function(){
    this.render('tmpResults'{
    数据:函数(){
    返回hcDrefs.find(Session.get('query'))})
    }
    });
    },{name:'showSome'});
    
    没有客户端POST,因此可以传递到客户端路由的数据受到URL中输入内容的限制(类似于GET请求)。所以,不,我不认为有更优雅的解决方案

    我认为你有两个选择:

  • 将对象串接到URL中:
  • 路由器.go('showSome',{arg:1}, {query:JSON.stringify(query\u object)}; //---------------------------------------------------------- Router.route('/:arg',function(){ this.render('tmpResults'{ 数据:函数(){ 返回hcDrefs.find(JSON.parse(this.params.query)}) } }); },{name:'showSome'}); 2) 使用全局或会话变量:

    Session.set('query',query\u对象);
    go('showSome',{arg:1});
    //----------------------------------------------------------
    Router.route('/:arg',function(){
    this.render('tmpResults'{
    数据:函数(){
    返回hcDrefs.find(Session.get('query'))})
    }
    });
    },{name:'showSome'});
    
    没有客户端POST,因此您可以传递到客户端路由的数据受到您可以放入URL的内容的限制(类似于GET请求)。所以,不,我不这么认为。您仅有的两个选项是将JSON对象串接到URL中(如果对象很小),或者使用全局或会话变量。没有客户端POST,因此您可以传递到客户端路由的数据受您可以放入URL中的内容的限制(类似于GET请求)。所以,不,我不这么认为。您仅有的两个选项是将JSON对象串入URL(如果对象很小),或者使用全局或会话变量。谢谢,这肯定回答了我的问题,现在一切正常。另一个快速的。为什么我需要“Session.set”。实际上,在我使用Session.set方法之前,仅在文件之间使用全局对象是不起作用的。我不确定这是为什么,我认为一个文件中的查询对象={}对所有人都是全局的……也许我错了?嗯,我也会这么认为。我通常更喜欢会话变量,因为它们是反应式数据源。但我知道,当不需要反应性时,也有一种使用全局变量的方法。不知道为什么在你的情况下不起作用。您在全局范围中定义了
    query\u object={}
    ,对吗?(也就是说,直接在一个文件中,而不是在一个块中)我想我是这样做的:P.当你试图找出为什么某些东西不起作用并左右更改代码时,谁知道我错过了什么……尽管我可能错过了一些东西。谢谢你的帮助!不客气。如果你不介意的话,请考虑投票,谢谢你,这肯定回答了我的问题,事情正在进行中。另一个快速的。为什么我需要“Session.set”。实际上,在我使用Session.set方法之前,仅在文件之间使用全局对象是不起作用的。我不确定这是为什么,我认为一个文件中的查询对象={}对所有人都是全局的……也许我错了?嗯,我也会这么认为。我通常更喜欢会话变量,因为它们是反应式数据源。但我知道,当不需要反应性时,也有一种使用全局变量的方法。不知道为什么在你的情况下不起作用。您在全局范围中定义了
    query\u object={}
    ,对吗?(也就是说,直接在一个文件中,而不是在一个块中)我想我是这样做的:P.当你试图找出为什么某些东西不起作用并左右更改代码时,谁知道我错过了什么……尽管我可能错过了一些东西。谢谢你的帮助!不客气。如果你不介意的话,请考虑投票。