迁移到 FlowRouter,需要类似于模板数据上下文的东西
Migrating to FlowRouter, need something similar to a template data context
所以我读了很多关于 Iron Router 与 FlowRouter 的讨论。
我使用 Iron Router 开始我的项目,但后来改变了主意,我目前正在迁移到 FlowRouter。
一切都很顺利,直到我开始迁移我的应用程序的评论部分。你看,这个部分在应用程序上被多次重复使用,它作为新闻、帖子、照片、视频等的评论部分。
使用 IR 数据上下文的示例:
Router.route('/news/:slug', {
name: 'newsItem',
waitOn: function() { Meteor.subscribe('news.single', this.params.slug) },
data: function() {
return News.findOne({slug: this.params.slug});
}
});
<template name="newsItem">
<p>{{title}}</p>
<p>{{body}}</p>
{{> commentSection}}
</template>
评论集合架构有一个 "type"(以了解此评论属于 "thing" 的什么类型,新闻、照片等)。该类型是在 commentSection 模板的 "form .submit" 事件中设置的。示例:
'submit form': function(e, template) {
e.preventDefault();
var $body = $(e.target).find('[name=body]');
console.log(template.data.type);
var comment = {
type: template.data.type,
parentId: template.data._id,
parentSlug: template.data.slug,
body: $body.val()
};
Meteor.call('insertComment', comment, function(error, commentId) {
if (error){
alert(error.reason);
} else {
$body.val('');
}
});
}
之所以有效,是因为模板数据上下文包含新闻项目,而新闻项目又具有类型 属性。
如果不按照官方指南的建议在模板上设置数据,我如何仅使用 Flow Router 实现类似的效果?
您可能需要使用模板订阅和 {{#with}} 助手。
Template.newsItem.onCreated( function() {
Template.instance().subscribe('news.single', FlowRouter.current().params.slug);
});
Template.newsItem.helpers({
item() {
let item = News.findOne();
if( item ) {
return item;
}
}
});
<template name="newsItem">
{{#with item}}
<!-- Your existing stuff -->
{{/with}}
</template>
所以我读了很多关于 Iron Router 与 FlowRouter 的讨论。
我使用 Iron Router 开始我的项目,但后来改变了主意,我目前正在迁移到 FlowRouter。
一切都很顺利,直到我开始迁移我的应用程序的评论部分。你看,这个部分在应用程序上被多次重复使用,它作为新闻、帖子、照片、视频等的评论部分。
使用 IR 数据上下文的示例:
Router.route('/news/:slug', {
name: 'newsItem',
waitOn: function() { Meteor.subscribe('news.single', this.params.slug) },
data: function() {
return News.findOne({slug: this.params.slug});
}
});
<template name="newsItem">
<p>{{title}}</p>
<p>{{body}}</p>
{{> commentSection}}
</template>
评论集合架构有一个 "type"(以了解此评论属于 "thing" 的什么类型,新闻、照片等)。该类型是在 commentSection 模板的 "form .submit" 事件中设置的。示例:
'submit form': function(e, template) {
e.preventDefault();
var $body = $(e.target).find('[name=body]');
console.log(template.data.type);
var comment = {
type: template.data.type,
parentId: template.data._id,
parentSlug: template.data.slug,
body: $body.val()
};
Meteor.call('insertComment', comment, function(error, commentId) {
if (error){
alert(error.reason);
} else {
$body.val('');
}
});
}
之所以有效,是因为模板数据上下文包含新闻项目,而新闻项目又具有类型 属性。
如果不按照官方指南的建议在模板上设置数据,我如何仅使用 Flow Router 实现类似的效果?
您可能需要使用模板订阅和 {{#with}} 助手。
Template.newsItem.onCreated( function() {
Template.instance().subscribe('news.single', FlowRouter.current().params.slug);
});
Template.newsItem.helpers({
item() {
let item = News.findOne();
if( item ) {
return item;
}
}
});
<template name="newsItem">
{{#with item}}
<!-- Your existing stuff -->
{{/with}}
</template>