Lightswitch HTML - 根据 table 中的字段更改货币

Lightswitch HTML - changing currency depending on field within a table

我有以下场景:

我有一个名为 OrderLines 的 table,其中包含

等信息

现在根据这些信息,我希望能够将 table 视图中的文本更改为类似于货币。目前默认情况下我可以确定 1 种货币,我将其表示为英镑,因此当 Lightswitch 看到货币值时,它会添加英镑。

我希望能够改变这个!!

在 "Edit PostRender Code" 块上,是否可以使用 contentItem.dataBind 函数根据与该特定项目关联的货币字段来更改此设置?

感谢您的帮助,希望这是可能的..(根据 table 中与此行关联的货币文件,这些应该以美元为单位)

正如您在上面看到的,OrderlIne table 在 "Orders" 屏幕上的 table 视图中

使用的代码:

myapp.ViewProjectOrder.ListPrice_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            if (contentItem.screen.OrderLines.Currency == "GBP") {
                $(element).text("£ " + value);
            }
            else if (contentItem.screen.OrderLines.Currency == "CAD") {
                $(element).text("$ " + value);
            }
        }
    });
};

Lightswitch目前把ListPrice看成是小数,就好像我把它设置成货币一样,它总是显示我设置的货币前缀,这就是为什么上面table中有英镑符号,我已经改变了将其转换为十进制以查看它是否可以正常工作:

如果我进入代码,它不会使用代码找到货币值:

我设置了一个类似的示例,并使用双精度值表示 ListPrice,使用字符串表示货币。我相信这是一种比使用内置 Money 类型更安全的使用方法。

下面的代码用于查看屏幕,可以稍微调整一下以在浏览屏幕上工作。您绑定到 ListPrice 值更改的值并设置适当的货币符号。一般来说,我建议使用更通用的函数 return 货币 ISO 代码的符号。您可能还想为更改货币时设置类似的绑定。

myapp.ViewProjectOrder.ListPrice_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            if ( contentItem.screen.ProjectOrder.Currency == "GBP" ) {
                $(element).text("£ " + value);
            }
        }
    });
};

假设一个更复杂的项目项目可以包含多个 OrderLine,要在查看项目的 OrderLines 集合时显示订单行详细信息,您需要更改集合行模板的 postRender 代码。以下代码应为您提供格式化值的起点:

myapp.ViewProject.rows_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            var tags = element.children;
            var searchText = contentItem.value.ListPrice;

            for (var i = 0; i < tags.length; i++) {
                if (tags[i].textContent == searchText) {

                    if (contentItem.value.Currency == "GBP") {
                        tags[i].textContent = "£ " + tags[i].textContent;
                    }
                    else if (contentItem.value.Currency == "USD") {
                        tags[i].textContent = "$ " + tags[i].textContent;
                    }
                    break;
                }
            }
        }
    });
};

由于 globalize.js 是内置的,您可以使用以下内容呈现任何货币:

Globalize.format(Globalize.parseInt(value), 'c0', 'en-gb');

c0代表小数点后0位的货币。可以从 db/other 字段中提取 En-gb - 抱歉 GBP 不起作用。

是的,无论您如何存储金额,似乎都需要 parseInt/ParseFloat。

LightSwitch 万岁!