1

我在概念上苦苦挣扎如何实现这一点(绑定什么事件等)。

我正在使用 CakePHP 并查看以下内容:

  • 要显示的产品数组和相关价格 ($products['Product']['price'])
  • 每个产品都有一个基础货币集($product['Currency]['currency'])
  • 我有 money.js、accounting.js 和另一个为 fx.rates 和 fx.base 设置 JSON 数据的 JS
  • 我知道用户希望看到的货币并且可能与产品基础货币不同 (SessionComponent::read('User.Preferences.Currency')
  • 显示货币短名称 (USD) 和转换值的 div,每个 div 都有唯一的 id

我的简单测试工作正常 - 使用 inline-php 我在两个脚本标签之间的页面上放置了一些 JS。

<script>
var value = accounting.unformat(<? echo $product['Product']['price'] ?>); // clean up number (eg. user input)
var target = "<? echo SessionComponent::read('User.Preference.currency'); ?>"; // or some user input
var convertedValue = fx(value).from("<? echo $product['Currency']['currency']  >").to(target);

accounting.formatMoney(convertedValue, {
    symbol: target,
    format: "%v %s"
}); // eg. "53,180.08 GBP"   

alert(convertedValue);
</script>

美好的。效果很好。但我无法解决的是如何在有 N 个产品的页面上实现这一点。

我假设我创建了一个 JS 函数,例如:

fx_convert(divid, price, fromcurrency, tocurrency)

在我的 Cake 视图中,我使用内联 php 来回显函数参数。

为这个函数使用 jQuery 的干净方法是什么,让价格“divs”调用 fx_convert 并用转换后的值更新它们的内容?

还是我的想法完全倒退了?非常感谢所有帮助。

4

1 回答 1

0

好好睡了一觉,终于明白了。:)

使用内联 PHP,我通过 div 属性传递往返货币并设置统一的类名。例如

<div class="fx" fx-from="<?php echo $product['Currency']['currency']; ?>" fx-to="<?php echo SessionComponent::read('User.Preference.currency') ?>" fx-value="<?php echo $product['Product']['price']; ?>"></div>

然后使用下面的 jQuery 片段循环遍历类“fx”的所有元素并进行所需的计算(使用优秀的 money.js 和 accounting.js)

$(document).ready(function() {

$(".fx").each( function( index, element ){

    var value = accounting.unformat($(this).attr("fx-value")); // clean up number (eg. user input)
    var target = $(this).attr("fx-to"); // or some user input
    var convertedValue = fx(value).from($(this).attr("fx-from")).to(target);

    $(this).html(accounting.formatMoney(convertedValue, {
        symbol: target,
        format: "%v %s"
    }));

});

});

仍然需要重构和整理,但解决方案就在那里。

于 2013-03-31T09:06:11.670 回答