我正在React.js
使用Meteor.js
,我正在尝试在React中使用Meteor的subscribe,基于我正在阅读的a blog post。我在这里思考,请纠正我,如果我错了(我是新的反应)是每次数据库更改,特别是wait
集合,前端将改变以反映这一点(我最终会找到一个中值)。
但是,我遇到了Meteor.subscribe('wait')
的问题,它应该返回mongo集合的选择,但事实并非如此。我相信这会导致我目前收到的错误消息Uncaught TypeError: Cannot convert undefined or null to object
。当我记录返回的数据时(如图所示),我刚刚获得undefined
。我知道查询有效,因为当我在Meteor.isServer中运行它时,它会从集合中返回一个文档。
那么如何使用getMeteorData(如下所示)从wait
集合返回数据,并在有更改(添加新文档等)时更新waitTime
DOM对象数据库?
Venue = React.createClass({
render() {
var self = this;
var venueName = this.props.params.venueName;
return (
<div className='venue'>
<h1>This is the Venue {venueName}</h1>
<WaitTime />
<div className='wait-time-chooser'>
<div className="red" onClick={self.waitTime.bind(this,venueName,'red')}>RED</div>
<div className="yellow" onClick={self.waitTime.bind(this,venueName,'yellow')}>YELLOW</div>
<div className="green" onClick={self.waitTime.bind(this,venueName,'green')}>GREEN</div>
</div>
</div>
);
},
waitTime(currentVenue,time) {
sendWaitTime(currentVenue,time);
}
});
function sendWaitTime(venue,time) {
var userId = Meteor.user()._id;
$.ajax({
type: "POST",
url: "/wait?venue=" + venue + "&wait=" + time + "&user=" + userId,
success: function(response){
console.log(response);
},
error: function(response){
console.log("Error:" + JSON.stringify(response));
}
});
}
WaitTime = React.createClass({
mixins: [ReactMeteorData],
render() {
return (
<div>
<h3>WAIT TIME: {!$.isEmptyObject(this.data)? this.data.wait : <p>Loading...</p>}</h3>
</div>
);
},
componentDidMount() {
// wait for task...
},
getMeteorData() {
var data = {};
var handle = Meteor.subscribe('wait');
if(handle.ready()) {
data.wait = Wait.findOne({});
console.log(data);
}
return data;
}
});
答案 0 :(得分:0)
得到它(感谢评论和阅读this Meteor Doc)。不得不在服务器上执行以下操作:
if (Meteor.isServer) {
Meteor.publish('wait', function waitPublication() {
return Wait.find();
});
}
我想我已经删除了autopublish,meteor remove autopublish
,默认情况下会附带Meteor。