collection.findOne()为表的每个项返回相同的值

时间:2018-03-27 10:22:11

标签: meteor

我知道我的问题有点愚蠢,但我被卡住了。 我有一份合同表,每行都有一个更新按钮; 当我点击该按钮时,会显示包含合同编辑表单的modalthat。 一切正常,但我的问题是模态显示每行的相同合同。 有关详细说明,则为屏幕截图 enter image description here

这个用于模态enter image description here

这是我的模板助手

    Template.ContractsList.helpers({
    lists: function() {
        Meteor.subscribe('listsMethod');
        return Contracts.find({});

    },
    list: function() {
        return Contracts.findOne();

    }
});

这是我的模板事件

Template.ContractsList.events({
    'click #editContract'(event) {
        $("#showModal").modal("show");
        console.log( Contracts.findOne({_id: this._id}) );


    },

    'click #hideModal'(event) {
        $("#showModal").modal("hide");
    },

});

这是我的模板

<template name="ContractsList">

    <div class="modal fade" id="showModal">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">edit</h4>
                </div>
                <div class="modal-body">

                    <div class="card-body">
                        {{#with list}}
                        <div class="form-group">
                            <label  class="select">Name</label>
                            <input type="text" class="form-control"  aria-describedby="emailHelp" value={{name}} />&nbsp;
                        </div>
                            <div class="form-group">
                                <label  >Package</label>
                                <div >
                                    <select id="role" name="select" class="form-control" >
                                        <option  value="package" selected disabled hidden >{{package}}</option>
                                        <option value="freemium">freemium</option>
                                        <option value="bronze">bronze</option>
                                        <option value="silver">silver</option>
                                        <option value="gold">gold</option>
                                        <option value="platium">platium</option>
                                    </select>
                                </div>
                            </div>
                        {{/with}}
                    </div>
                </div>
                <div class="modal-footer">
                    <Button class="primary" >Create contact</Button>
                    <Button class="secondary" id="hideModal">Cancel</Button>
                </div>
            </div>
        </div>
    </div>
    <div class="breadcrumb">
        <div class="table-responsive">
            <table class="table">
                <thead>
                <tr>

                    <th>Name</th>
                    <th>Package Type</th>
                    <th>Actions</th>
                </tr>
                </thead>
                <tbody>
                {{#each lists}}
                    <tr>
                        <td>
                            {{name}}
                        </td>
                        <td>
                            {{package}}

                        </td>
                        <td>
                            <Button class="btn btn-outline-primary" id="editContract"><img src="../../../../../img/icons/addcontact-icon.png" /></Button>&nbsp;&nbsp;
                        </td>
                    </tr>
                {{/each}}
                </tbody>
            </table>
        </div>
    </div>
</template>

在模板事件的控制台日志中,我正确地获取了数据

  

{_ id:“Qu8pTSzLDLGKRNRzd”,名称:“ilyes”,包:“bronze”} {_id:   “w7NDzerxivAjhK3dy”,名称:“ee”,包装:“freemium”}

我该怎么办?

1 个答案:

答案 0 :(得分:3)

在您的点击处理程序中设置Session变量(或reactiveVar),然后在list帮助程序中使用它:

事件处理程序:

'click #editContract'(event) {
  $("#showModal").modal("show");
  console.log( Contracts.findOne({_id: this._id}) );
  Session.set('currentRecordId',this._id);
},

助手:

list() {
    return Contracts.findOne(Session.get('currentRecordId');
}