【问题标题】:Meteor - Create Polls - Database UpdateMeteor - 创建投票 - 数据库更新
【发布时间】:2015-12-03 22:51:34
【问题描述】:

我正在使用 Meteor 创建一个网络应用程序,允许用户创建和投票投票。

目前我正在尝试让用户能够对投票进行投票,但我没有运气。这是我目前的方法:

Template.PollParticipate.events({
    'click .vote': function(event) {

        event.preventDefault();

        var target = $(event.target);

        var pollID = $(this).parent('.poll-card').data('id');
        var voteID = $(this).data('id');

        var voteString = 'options.' + voteID + '.votes';
        var action = {};
        action[voteString] = 1;

        Polls.update(
            {_id: pollID},
            {$inc: action}
        );
    }
});

这是模板html:

<template name="PollParticipate">
    <div class="poll-card text-center" data-id="{{ _id }}">
        <h3>{{question}}</h3>
        <form>
            <div>
                {{#each options}}
                    <input type="radio" name="option" value={{option}} data-id="{{ _index }}">{{option}}
                {{/each}} 
            </div>
            <button type="submit" class="vote">Submit</button>
        </form>
    </div>
</template>

在这种情况下,当用户单击投票按钮时,该方法将查找父项的 id 并将其存储在变量中。它还将尝试查找所选元素的索引(使用单选按钮)。然后通过它,使投票计数器更新一。

不幸的是,这没有发生。

整个项目的代码可以找到:https://github.com/smeloa/fcc-voting-app

谢谢!

【问题讨论】:

    标签: jquery mongodb meteor


    【解决方案1】:

    在 Meteor 事件处理程序中,this 是发生事件的数据上下文,而不是 DOM 元素,因此 jQuery $(this) 约定将不起作用。 (事件从提交按钮发生,所以this 是轮询对象。)不过,这确实简化了问题 - 因为事件处理程序可以访问数据上下文,您可以将轮询 ID 设为 this._id 而无需用于数据属性。

    如果您向事件处理程序添加第二个参数template

    "click .vote": function (event, template) {
        // ...
    }
    

    那么template.$ 是jQuery $ 的一个版本,它只选择模板DOM 内的元素。这样,您可以通过以下方式获取选定的单选按钮:

    template.$("input:checked")
    

    然后您可以使用 jQuery 方法来识别该选项。

    您还需要使用一种投票方法,而不是从客户端直接操作数据库。现在,根据您当前的allow 规则集,任何人都可以将每个选项的投票设置为任何他们想要的。

    【讨论】:

    • 感谢您的回答,我会考虑实施它。是的,我目前在测试时将其保持打开状态,但在我开始工作后会创建一个 Method.call。
    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多