流星/蒙戈 - 从模板中检索_id以在功能中使用



我是编程新手,所以如果这看起来很明显,请道歉。 在询问之前,我已经花了很多时间,所以我希望这没问题。

我正在尝试检索 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的数据上下文。 您需要查看流星指南以获取有关其中一些概念的帮助。 希望对您有所帮助!

最新更新