我是编程的新手,如果这看起来显而易见,那就道歉了。我已经花了相当长的时间在这之前询问,所以我希望这没关系。
我正在尝试检索mongo文档的ID,以便我可以更新它(通过表单)。
我将展示到目前为止我所拥有的:
铁路由器通过网址将我带到页面:
Router.route('companyDetails', {
name: 'companyDetails',
template: 'companyDetails'
});
显示mongo文档的模板(它确实有效):
<template name = "companyDetails">
<h3>Update your Company Details</h3>
<form class = "companysave">
<dl>
{{#each company}}
id is: {{_id}}<br>
<p><input type = "text" value="{{name}}" name="companyName" size="35"></p>
<p><input type = "text" placeholder="{{phone}}" name="companyPhone" size="35"></p>
<p><input type = "text" placeholder="{{web}}" name="companyWeb" size="35"></p>
<p><input type = "text" placeholder="{{twitter}}" name="companyTwitter" size="35"></p>
<p><input type = "text" placeholder="{{facebook}}" name="companyFacebook" size="35"></p>
{{/each}}
</dl>
<p><input type="submit" value="Reset">
<input type="submit" value="Update"></p>
</form>
模板助手将文档数据发送到模板:
Template.companyDetails.helpers({
'company': function(){
return Organisations.find();
}
})
试图获取文档ID以将更新的信息发送到服务器上的方法的模板:
Template.companyDetails.events({
'submit form': function(event){
event.preventDefault();
var documentId = this._id;
var name = $('[name=companyName]').val();
var web = $('[name=companyWeb]').val();
var twitter = $('[name=companyTwitter]').val();
var facebook = $('[name=companyFacebook]').val();
Meteor.call('updateCompanyDetails', documentId, name, web, twitter, facebook);
}
});
我也有一个服务器方法,但我目前在模板事件中遇到了上述函数。
我收到的错误基于:
var documentId = this._id;
它来自未定义。有趣的是,如果你看一下模板本身,我正在编写一些名为:
的调试信息 id is: {{_id}}<br>
并显示正确的ID。所以模板有ID。它加载并显示mongo文档中的数据,但我无法从模板事件中检索它。
有人可以提供一些关于我在这里做错的建议吗?
同样,我是新手(以及一般的编程),所以这可能是一个很轻松的时刻。
非常感谢,Rob
答案 0 :(得分:3)
根据您的方法调用,您似乎只想更新此页面上的某个特定公司,并且只会在.find()中返回一个。如果不是这样,您需要更新您的出版物和您的路线,只返回一个组织。以下是根据我的假设使事情有效的代码:
<template name = "companyDetails">
<h3>Update your Company Details</h3>
{{#with company}}
<form class = "companysave">
<dl>
id is: {{_id}}<br>
<p><input type = "text" value="{{name}}" name="companyName" size="35"></p>
<p><input type = "text" placeholder="{{phone}}" name="companyPhone" size="35"></p>
<p><input type = "text" placeholder="{{web}}" name="companyWeb" size="35"></p>
<p><input type = "text" placeholder="{{twitter}}" name="companyTwitter" size="35"></p>
<p><input type = "text" placeholder="{{facebook}}" name="companyFacebook" size="35"></p>
</dl>
<p><input type="submit" value="Reset">
<input type="submit" value="Update"></p>
</form>
{{/with}}
</template>
Template.companyDetails.helpers({
'company': function(){
return Organisations.findOne();
}
});
我将find()更改为findOne()以确保只返回一个文档。然后我将你的#each切换到#with,以确保我们只使用帮助器中返回的一个文件。我还将#with移到了表单元素之外。这很重要,因为它在您的提交事件中设置了this
的数据上下文。您需要查看meteor guide以获取有关其中一些概念的帮助。希望有所帮助!