Meteor JQuery开始评级问题

时间:2016-07-11 08:36:18

标签: javascript jquery meteor

我在尝试使用以下Meteor包时遇到问题:dandv:jquery-rateit。

我将它用于票证系统,其中每个更新都有一个开始评级。但是当我有超过1条评论时,第二条评论总是返回0值。

这是我的代码:

JS:

Template.rating.events({
    'click .rateit': function(e){
    var rating = $('#rate').rateit('value');
    console.log(rating);
    Session.set('UpdateId', this._id);
    var UpdateId = this._id;
    console.log(UpdateId);
    /*Meteor.call('saveRate',rating,UpdateId);*/

    return false;
  }
});


Template.rating.rendered = function () {
  this.$('.rateit').rateit();
}

HTML:

<template name="Update">

    {{#each Updates}}
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title" align="center">Update</h3>
            </div>
            <div class="panel-body">
                <table class="table">
                    <tr>
                        <td width="15%" nowrap align="left">Created By:</td>
                        <td width="35%" align="left">{{createdBy.username}}</td>
                        <td width="15%" nowrap align="left">Created At:</td>
                        <td width="35%" align="left">{{formatDate createdAt}}</td>
                        <td width="15%" nowrap align="left">Rating:</td>

                        <td width="35%" align="left">{{> rating}}</td>

                    </tr>
                    <tr>
                      <td colspan="4">{{description}}</td>
                    </tr>  
                </table>
            </div>
          </div>
    {{/each}}
</template>

<template name="rating">
  <div class="rateit" id="rate"></div>
</template>

现在,当我尝试评价第二条评论时,返回0.屏幕截图:http://screencast.com/t/ejaTI98X

无论我选择哪个星,它总是返回0.我认为错误应该在HTML中。

我非常感谢你的帮助。如果您有任何疑问,请告诉我。

度过美好的一天。

1 个答案:

答案 0 :(得分:0)

您迭代更新,我认为有多个更新。对于每次更新,您都会调用模板{{&gt; rateit}},然后使用id = rate呈现div,这样您最终会得到几个具有相同ID的div,因此您根本不知道哪一个$( &#39;#rate&#39;)您正在访问。

在事件处理程序中,您还使用全局jQuery处理程序。

我建议您使用以下模式来将jQuery本地范围扩展到模板上下文

Template.rating.events({
    'click .rateit': function(e,template){
     var rating = template.$('.rateit').rateit('value');
     console.log(rating);
     Session.set('UpdateId', template.data._id);
     var UpdateId = template.data._id;
     console.log(UpdateId);
     /*Meteor.call('saveRate',rating,UpdateId);*/

     return false;
  }
});