我是编程新手,所以如果这看起来很明显,请道歉。 在询问之前,我已经花了很多时间,所以我希望这没问题。
我正在尝试检索 mongo 文档的 ID,以便我可以更新它(通过表单(。
我将展示到目前为止我所拥有的:
Iron Router 通过 URL 将我带到该页面:
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 文档的数据,但我无法从模板事件中检索它。
任何人都可以就我在这里做错了什么提供一些建议吗?
同样,我是新手(以及一般的编程(,所以这可能是一个掌掴的时刻。
非常感谢,罗伯
根据您的方法调用,看起来您只想在此页面上更新一家特定的公司,并且您的 .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
的数据上下文。 您需要查看流星指南以获取有关其中一些概念的帮助。 希望对您有所帮助!