流星货币兑换

时间:2015-12-14 19:28:45

标签: javascript jquery html mongodb meteor

我很难通过使用select标记并使用JQuery获取值来尝试更新货币交换。

我最初的计划是使用来自Meteor车把的{{#if}}来做逻辑。使用MongoDB切换字段时,当用户点击不同的选项时,它会自动切换货币字段。

我目前正在使用名为theara:moneyjs的Meteor包。点击here,了解包裹信息。

这是我目前的代码:

HTML

<template name="product_table">
    <table>
        <thead>
            <tr>
                <th>Product Name</th>
                <th>Currency
                    <select id="currency">
                        <option value="aud">AUS Dollar</option>
                        <option value="usd">US Dollar</option>
                        <option value="hkd">HK Dollar</option>
                    </select>     
        {{#each product}}
            <tbody>
                <tr>
                    <td>{{productName}}</td>
                    <td>{{productPrice}}</td>
                    <!-- {{#if getEXR}} Does not work, since is not a boolean value
                        <td>{{productPrice}}</td>
                    {{/if}} -->
            </tr>
            </tbody>
        {{/each}}
    </table>
</template>

的JavaScript

Template.product_table.helpers({
    product: function() {
        return Products.find({}, {sort:{createdAt:-1}});
    },

    getEXR: function() {
        $(document).on('change', '#currency', function () {
            var getCurrency = $("#currency option:selected").val();

            if (getCurrency === "aud") {
            //I am not quite sure, how grab specific field values from MongoDB
                fx.convert(Products.find().productPrice()).from("USD").to("AUD");
            }

            else if (getCurrency === "usd") {
                fx.convert(Products.find().productPrice()).from("USD").to("USD");
            }

            else if (getCurrency === "hkd") {
                fx.convert(Products.find().productPrice()).from("USD").to("HKD");
            }
    }
)};

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

您还需要从getEXR帮助程序而不是游标返回单个值。再加上你的助手没有回复任何东西!

你甚至不需要布尔值。请改用Session变量(或反应变量)。见下文:

<强> HTML

<template name="product_table">
    <table>
        <thead>
            <tr>
                <th>Product Name</th>
                <th>Currency
                    <select id="currency">
                        <option value="AUD">AUS Dollar</option>
                        <option value="USD">US Dollar</option>
                        <option value="HKD">HK Dollar</option>
                    </select>     
        {{#each product}}
            {{> oneProduct}}
        {{/each}}
    </table>
</template>

<template name="oneProduct">
   <tbody>
       <tr>
           <td>{{productName}}</td>
           <td>{{productPrice}}</td>
           <td>{{localPrice}}</td>
       </tr>
   </tbody>
</template>

<强>的JavaScript

Template.product_table.helpers({
    product: function() {
        return Products.find({}, {sort:{createdAt:-1}});
    }  
)};

Template.product_table.events({
  'change #currency': function(ev){
      Session.set('currency') = $("#currency option:selected").val();
  }
});

Template.oneProduct.helpers({
    // with a nested template the data context (this) becomes a single product
    localPrice: function() {
        var currency = Session.get('currency');
        return fx.convert(this.productPrice()).from("USD").to(currency);
    }
)};

您可能还希望进行默认货币转换,并在模板的onCreated处理程序中初始化currency会话变量。

答案 1 :(得分:0)

getEXR必须返回一个布尔值。 它不像Javascript,火焰不评价这个。你必须做一个帮助,返回一个布尔值

答案 2 :(得分:0)

正如我在评论中提到的那样,您应该按照入门教程进行操作,但这里的关键组件是您必须

  1. 确保您需要的数据从服务器发布到客户端
  2. 您在创建此模板时订阅该出版物
  3. 使用模板事件
  4. 您可能希望在选择框更改后设置反应式var或Session var,然后在帮助程序中根据该反应式数据源更改值。
  5. 在#each中使用模板片段并将帮助器附加到该片段(很容易让您访问助手中的当前产品)