iron-router 路由的动态查询对象
dynamic query object for iron-router route
我目前的路线如下:
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'});
但这似乎行不通。
在生成数据上下文的查询可以是可变形式的情况下,设置路由数据上下文的好方法是什么?我认为全局对象可能会起作用,但我很好奇是否有一种更具战略意义的方式通过路由器。我仍在通过铁路由器文档挖掘我可以挂钩的东西。
没有客户端 POST,因此您可以传递到客户端路由的数据受限于您可以放入 URL 的数据(类似于 GET 请求) .所以,不,我认为没有更优雅的解决方案。
我想你有两个选择:
- 将您的对象串入 URL:
Router.go('showSome', {arg: 1},
{query: JSON.stringify(query_object)});
//----------------------------------------------------------
Router.route('/:arg', function(){
this.render('tmpResults', {
data: function(){
return hcDrefs.find(JSON.parse(this.params.query)}})
}
});
}, {name: 'showSome'});
2) 使用全局或会话变量:
Session.set('query', query_object);
Router.go('showSome', {arg: 1});
//----------------------------------------------------------
Router.route('/:arg', function(){
this.render('tmpResults', {
data: function(){
return hcDrefs.find(Session.get('query'))}})
}
});
}, {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'});
但这似乎行不通。
在生成数据上下文的查询可以是可变形式的情况下,设置路由数据上下文的好方法是什么?我认为全局对象可能会起作用,但我很好奇是否有一种更具战略意义的方式通过路由器。我仍在通过铁路由器文档挖掘我可以挂钩的东西。
没有客户端 POST,因此您可以传递到客户端路由的数据受限于您可以放入 URL 的数据(类似于 GET 请求) .所以,不,我认为没有更优雅的解决方案。
我想你有两个选择:
- 将您的对象串入 URL:
Router.go('showSome', {arg: 1},
{query: JSON.stringify(query_object)});
//----------------------------------------------------------
Router.route('/:arg', function(){
this.render('tmpResults', {
data: function(){
return hcDrefs.find(JSON.parse(this.params.query)}})
}
});
}, {name: 'showSome'});
2) 使用全局或会话变量:
Session.set('query', query_object);
Router.go('showSome', {arg: 1});
//----------------------------------------------------------
Router.route('/:arg', function(){
this.render('tmpResults', {
data: function(){
return hcDrefs.find(Session.get('query'))}})
}
});
}, {name: 'showSome'});