如何转义/引用Scala集合的元素以传递给AngularJS初始化?

How to escape/quote elements of Scala collection to pass to AngularJS initialization?

我需要为angularjs自动完成指令初始化String常量的集合。也许还有另一种方法,但是我这样做是将值注入到相关的Ctrl中。为此,我像这样在index.scala.html中定义这些值。请注意,CcyPair是Scala枚举类型:

1
2
3
4
5
    angular.module("backTestDemoApp").value("ccyPairs",
        [
            @CcyPair.values.map("'%s'".format(_)).mkString(",")
        ]
    );

我想将其作为HTML输出:

1
2
3
4
5
    angular.module("backTestDemoApp").value("ccyPairs",
        [
            'CHFEUR', 'CHFGBP', 'CHFJPY', ...
        ]
    );

但是我在HTML中得到的却是:

1
2
3
4
5
    angular.module("backTestDemoApp").value("ccyPairs",
        [
           "CHFEUR","CHFGBP","CHFJPY","CHFUSD","EURCHF","EURGBP","EURJPY","EURUSD","GBPCHF","GBPEUR","GBPJPY","GBPUSD","JPYCHF","JPYEUR","JPYGBP","JPYUSD","USDCHF","USDEUR","USDGBP","USDJPY"
        ]
    );

我也尝试过将每个元素package在单引号或双引号HTML代码中,但仍会因Play模板而变得无用:

1
@CcyPair.values.map("%s".format(_)).mkString(",")

OK在播放模板文档中找到了解决方案。解决方案是将代码package在@Html(_)中,以防止Twirl自动转义,而是按原样使用原始输出。因此,完整的解决方案是:

1
2
3
4
5
    angular.module("backTestDemoApp").value("ccyPairs",
        [
            @Html(CcyPair.values.map("'%s'".format(_)).mkString(","))
        ]
    );