Javascript Meteor模板在使用后退按钮或熨斗布线后没有反应
我有一个简单的模板,显示一个网站列表和一个详细信息页面,允许用户发布有关该网站的评论。出于某种原因,当单击浏览器中的“后退”按钮或链接到另一个页面,然后再次返回时,注释的更新功能不再是反应性的。集合已更新,但未呈现到模板。控制台中不会抛出任何错误 我怀疑我的助手有问题,但我是一个彻头彻尾的傻瓜,我花了7天或更长的时间来理解meteor,mongo,react…在上了一个简短的课程之后 更新集合的我的代码:Javascript Meteor模板在使用后退按钮或熨斗布线后没有反应,javascript,mongodb,meteor,iron-router,Javascript,Mongodb,Meteor,Iron Router,我有一个简单的模板,显示一个网站列表和一个详细信息页面,允许用户发布有关该网站的评论。出于某种原因,当单击浏览器中的“后退”按钮或链接到另一个页面,然后再次返回时,注释的更新功能不再是反应性的。集合已更新,但未呈现到模板。控制台中不会抛出任何错误 我怀疑我的助手有问题,但我是一个彻头彻尾的傻瓜,我花了7天或更长的时间来理解meteor,mongo,react…在上了一个简短的课程之后 更新集合的我的代码: Template.website_details_form.events({ "s
Template.website_details_form.events({
"submit .js-add-comment": function(event) {
var post, theID;
post = event.target.post.value;
theID = this._id;
console.log("the post:" +post);
console.log("this is the id: " +theID);
if(Meteor.user()) {
var user = Meteor.user().username;
if (post != ""){
Websites.update({_id: theID}, {$addToSet:{comments:{user:user, comment:post}}});
$('input#post').removeClass('error');
} else{
$('input#post').addClass('error');
}
} else {
swal("Please sign in to post!", "Oops...", "error");
}
event.preventDefault();
}
});
我的助手们公认是时髦的助手:
var details_ID;
var thecomments;
Template.website_details.helpers({
sites:function() {
if(details_ID === undefined) {
return Websites.find(
{ title: 'Goldsmiths Computing Department' });
} else {
return Websites.find({_id:details_ID});
}
}
});
Template.website_details_item.helpers({
comments:function() {
if(thecomments === undefined) {
var c = Websites.find({title: 'Goldsmiths Computing Department'}).fetch();
return c[0].comments;
} else {
return thecomments;
}
}
});
Template.website_details_form.helpers({
identify:function(){
if(details_ID === undefined){
return Websites.find({
title: 'Goldsmiths Computing Department' });
} else {
return Websites.find({_id:details_ID});
}
}
});
我的路由器:
Router.route('/website_details', function () {
this.render('navBar', {to: 'navbar' });
this.render('website_details', {to: 'main'});
});
我正在使用文档上的单击功能获取我在帮助程序中使用的VAR的信息…this.\u id
在使用back按钮和iron routing之后,我确实看到了另一个专门询问反应性的问题,但该线程在github页面终止,没有多少交互,并解决了一个我没有的问题……据我所知……我是一个noob……提前感谢。查看该页面,我发现:
网站
集合正在正确更新帮助程序
访问数据时,请直接从网站
集合中读取数据:会话中存储大量数据,而且因为客户端的minimongo集合已经存储了相同的数据。查看,我发现:
在中,网站
集合正在正确更新
解决此问题的两条建议:
从帮助程序
访问数据时,请直接从网站
集合中读取数据:
我建议使用第一种方法,因为它可以避免在会话中存储大量数据,而且客户端minimongo集合已经存储了相同的数据。您能创建一个git以便我们测试它吗?好的,谢谢!我清理了我的助手…终于明白了如何使用会话:)但我就是不能让这个事件重新呈现模板,你知道,反应性。。。我会尽快发布Git。@BlazeSahlzen我终于创建了Git。这是一个课堂项目,我必须尽快完成。回购协议在我试用了你的代码。在您的网站\u details
中,您正在正确更新集合,但您的助手正在从未更新的会话中读取数据。通常,您希望助手直接从前端数据库读取数据(后端数据库会对其进行反应性更新)你能创建一个git以便我们测试它吗?好的,谢谢!我清理了我的助手…终于明白了如何使用会话:)但我就是不能让这个事件重新呈现模板,你知道,反应性。。。我会尽快发布Git。@BlazeSahlzen我终于创建了Git。这是一个课堂项目,我必须尽快完成。回购协议在我试用了你的代码。在您的网站\u details
中,您正在正确更新集合,但您的助手正在从未更新的会话中读取数据。通常,您希望助手直接从前端数据库读取数据(后端数据库会对其进行反应性更新)
Websites.update({ // Saving to collection
_id : theID
}, {
$addToSet : {
comments : {
user : user,
comment : post
}
}
});
...
comments: function(){
var post = Session.get('site'); // Reading from Session
return post.comments;
},
...
var site_data = Websites.findOne({
_id: someId
});
if(site_data) { // Check if comments_data is undefined
return site_data.comment;
} else {
return null;
}
Websites.update({ // Saving to collection
_id : theID
}, {
$addToSet : {
comments : {
user : user,
comment : post
}
}
}, function(err, data) {
if(!err) {
var site_data = Session.get('site');
/* Modify site_data */
Session.set('site', site_data);
}
});