Basically, I’m just trying to render a template with the result attribute of a document returned by a MongoDB find() call. I have autosubscribe on.
I have an html template
<template name="results">
status: {{result}}
</template>
And I’m trying to render it in the js file:
if (Meteor.is_client) {
Template.results.result = function() {
return Results.find({'type': 'test'}).fetch()[0].result;
}
}
There’s a record in mongo {type: "test", result: "success"}. The code keeps throwing an error that “undefined has no attribute result”. However, when I just return Results.find({'type': 'test'}).fetch()[0] it does actually return an object, not undefined (and if I log it to the console, I can see that it does have the result attribute I set).
The only thing I can think of is that it might be related to the reactive behavior of meteor – maybe the MongoDB call is initially returning undefined, and then later updating to contain the correct document. Is that correct? And if so, how can I get the value of the result attribute of that document?
Your template gets rendered as soon as the client starts up, before the server has sent the documents in Results. Try this (
findOneis shorthand forfetch()[0]):