使用AEM的Javascript Use-API,如何将一个函数传递给HTL并用参数调用它?

问题描述 投票:0回答:1

在Adobe AEM中,说我有一个Java语言Use-API文件,并且此数据已传递回:

文件:secure.js

use( function() {
  var pages = ['home', 'about', 'contact'];

  return {
    pages: pages,
    isSecurePage: function(pageName) {
      return pages.indexOf(pageName) > -1;
    }
});

然后在HTL中,我如何去调用isSecurePage方法并将所需的参数传递给它?

我已经尝试过:

文件:home.html

<sly data-sly-use.secure="./secure.js" />

<div class="row" data-sly-list.child="${currentPage.listChildren}">
  <sly data-sly-test="${secure.isSecurePage(child.getName)}"> <!-- ERROR! -->
    <a href="${child.getPath}.html">${child.getName}</a>
  </sly>
</div>

但是我收到这样的错误:

Parsing error in template ...

... extraneous input '(' expecting {'}', '.', '&&', '||', '[', '@'} for expression ${secure.isSecurePage( child.getName ) }

我尝试用不同的方式重写它们,以查看是否可以调用该方法,但此处所有操作均失败:

1)secure.isSecurePage @ child.getName

2)secure.isSecurePage @ 'child.getName' )

3)secure.isSecurePage @ 0=child.getName )

虽然下面的这些不会引起错误,但似乎不能正确传递参数:

4)secure.isSecurePage @ first=child.getName )

5)secure.isSecurePage @ pageName=child.getName )

^始终返回false,即使它应该是true

我将尝试找出一种从Javascript Use-API登录的方法,以进行进一步调查。

如果有人知道,请帮助!

谢谢

javascript aem sightly
1个回答
3
投票

您无法调用采用HTL参数的方法。唯一允许参数的构造是模板和使用对象实例化。有关更多详细信息,请检查规范的data-sly-use [0]和Use-API [1]部分。

[0]-https://github.com/adobe/htl-spec/blob/1.4/SPECIFICATION.md#221-use[1]-https://github.com/adobe/htl-spec/blob/1.4/SPECIFICATION.md#4-use-api

© www.soinside.com 2019 - 2024. All rights reserved.