【问题标题】:Selecting a field in MongoDB that was passed from a data context在 MongoDB 中选择从数据上下文传递的字段
【发布时间】:2016-06-19 15:17:58
【问题描述】:

我的应用使用#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

【问题讨论】:

  • @MichelFloyd 我已将 HTML 模板添加到原始帖子中。 console.log(whatEvent) 返回正确的 ID:我通过控制台使用 Events.find().fetch() 将其与相关事件 ID 进行比较,对其进行了交叉检查。 (事件是 MongoDB 集合的名称)。
  • 我已经在 EDIT 2 下添加了对象。您的意思是 myEvents 助手吗?
  • 30 是 console.log(whatEvent.eventTicketPrice); 需要返回的值,但它目前仍返回 undefined。创建事件时,它的字段 eventTicketPrice 设置了值 30 - 我已经检查了高音,那里没有错字。

标签: javascript mongodb meteor handlebars.js


【解决方案1】:

您只是将this._id 传递给您的buyEventTicket 函数,而不是整个对象。只需传入this 即可访问对象的其他属性:

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

【讨论】:

  • 这是解决方案,谢谢。我的错误印象是,如果你只有一个对象的 ID,你仍然可以在任何地方访问它的字段,但没有意识到你必须传递整个事情。
【解决方案2】:

您可以在{{&gt; displayEventsTable}} 之前使用{{#with this}},然后使用{{/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>

【讨论】:

  • witheach 中是多余的 - each 已经将数据上下文设置为单个事件对象。
  • @MichelFloyd 你有没有使用 {{eventTicketPrice}} 将模板中的数据显示到显示的数据中
猜你喜欢
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多