如何在没有收集任何数据的情况下在 Iron Router 中执行基于 URL 的功能?
How to execute function based on URL in Iron Router without any data from collection?
如何根据Session.set路由而不保存任何数据到集合?例如,用户向某个站点输入 URL。
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
Session.set('url', url);
}
如果我们想基于 URL 执行函数,那么路由文件会是什么样子呢?让我们说:
www.example.com/download?url=http://youtube.com
并根据来自 URL?
的输入执行函数
我不喜欢我目前的做法。在我看来太复杂如下:
Template.formButton.events({
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
var linkId = Link.insert({
url: url,
});
var route = {_id:linkId};
Router.go('download', route);
}
});
this.route('download', {
path: '/download/:_id',
where: 'client',
data: function() {
return Link.findOne(this.params._id);
},
onBeforeAction: function() {
var data = this.data();
if (data)
var url = data.url;
console.log(url);
Meteor.call(getUrl, url, function(error, result) {
console.log(result)
this.next();
});
}
});
正如 MasterAM 所说,只需 url 编码您的 url 并将其直接提供给您的路线,但作为查询参数,而不是路径组件:
模板:
Template.formButton.events({
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
Router.go('download?url=' + encodeURIComponent(url));
}
});
路由器:
this.route('download', {
path: '/download',
onBeforeAction: function() {
var url = decodeURIComponent(this.params.query.url);
console.log(url);
Meteor.call(getUrl, url, function(error, result) {
console.log(result)
this.next();
});
}
});
如何根据Session.set路由而不保存任何数据到集合?例如,用户向某个站点输入 URL。
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
Session.set('url', url);
}
如果我们想基于 URL 执行函数,那么路由文件会是什么样子呢?让我们说:
www.example.com/download?url=http://youtube.com
并根据来自 URL?
的输入执行函数我不喜欢我目前的做法。在我看来太复杂如下:
Template.formButton.events({
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
var linkId = Link.insert({
url: url,
});
var route = {_id:linkId};
Router.go('download', route);
}
});
this.route('download', {
path: '/download/:_id',
where: 'client',
data: function() {
return Link.findOne(this.params._id);
},
onBeforeAction: function() {
var data = this.data();
if (data)
var url = data.url;
console.log(url);
Meteor.call(getUrl, url, function(error, result) {
console.log(result)
this.next();
});
}
});
正如 MasterAM 所说,只需 url 编码您的 url 并将其直接提供给您的路线,但作为查询参数,而不是路径组件:
模板:
Template.formButton.events({
'submit #form': function (event, template) {
event.preventDefault();
var url = template.find('#input').value;
if (url)
Router.go('download?url=' + encodeURIComponent(url));
}
});
路由器:
this.route('download', {
path: '/download',
onBeforeAction: function() {
var url = decodeURIComponent(this.params.query.url);
console.log(url);
Meteor.call(getUrl, url, function(error, result) {
console.log(result)
this.next();
});
}
});