选择从数据上下文传递的MongoDB中的字段

时间:2016-03-05 22:13:41

标签: javascript mongodb meteor handlebars.js

我的应用使用#each events生成一个表格。

每行有4个事件票据(每行代表一个事件),当您点击第一张票时,这就是执行的内容:

Template.displayEventsTable.events({

"click .buyTicket1": function () {

    buyEventTicket(1, this._id);

}

这是buyTicket函数:

function buyEventTicket (whatNumber, whatEvent) {

    var buyer = Meteor.user();

    console.log(whatNumber); // works
    console.log(whatEvent); // works
    console.log(whatEvent.eventTicketPrice); // currently shows up as "undefined"

  };
}

我坚持的地方是试图获得eventTicketPrice,它显示为未定义。尽管阅读了Meteor和HandleBars文档,但尚未开启关于可能导致此问题的原因。

事件ID不会为其自己的某个字段返回正确的值似乎不合逻辑。

我错过了什么?

编辑1

HTML模板

<template name="myEvents">
<h2>Events</h3>
          <table>
            <tr class="first-row">
              <th>Ticket 1</th>
              <th>Ticket 2</th>
              <th>Ticket 3</th>
              <th>Ticket 4</th>
            </tr>
            {{#each events}}
              {{#if eventsTypeA 1}}
                {{> displayEventsTable}}
             {{/if}}
            {{/each}}
          </table>
        </div>
      </div>
</template>

事件表模板

<template name="displayEventsTable">
  <tr>
    <td><button class="buyTicket1 button-blue">Buy #1</button></td>
    <td><button class="buyTicket2 button-blue">Buy #2</button></td>
    <td><button class="buyTicket3 button-blue">Buy #3</button></td>
    <td><button class="buyTicket4 button-blue">Buy #4</button></td>
  </tr>
</template>

编辑2

_id: "YQXvUoBGKvhPObzFw"
createdAt: Sat Jan 02 2016 22:47:35 GMT+0100 (CET)
eventStatus: "open"
eventTicketPrice: 30
eventTickets: Array[4]
__proto__: Object

2 个答案:

答案 0 :(得分:1)

您可以在{{#with this}}之前使用{{> displayEventsTable}},然后使用此{{/with}}关闭:

<template name="myEvents">
<h2>Events</h3>
          <table>
            <tr class="first-row">
              <th>Ticket 1</th>
              <th>Ticket 2</th>
              <th>Ticket 3</th>
              <th>Ticket 4</th>
            </tr>
            {{#each events}}
              {{#if eventsTypeA 1}}
                {{#with this}}
                {{> displayEventsTable}}
                {{/with}}
             {{/if}}
            {{/each}}
          </table>
        </div>
      </div>
</template>

答案 1 :(得分:0)

您只是将this._id传递给buyEventTicket函数,而不是整个对象。只需通过this,然后您就可以访问该对象的其他属性:

Template.displayEventsTable.events({
  "click .buyTicket1": function () {
    buyEventTicket(1,this);
});