jQuery中的Tapestry属性

时间:2014-05-26 11:52:49

标签: javascript jquery tapestry

我有两个文件:“Index.properties”,“Index_es.properties”,用于Tapestry中的多语言。 我想从* .js文件中的那些文件中读取文字,例如:

 **Index.properties:**
    menu=Main menu
    menu-welcome=Welcome to my webpage


  **Index_es.properties:**
    menu=Menú principal
    menu-welcome=Bienvenido a mi página web


  **Index.tml:**
      ...
      <script type="text/javascript" language="JavaScript"
    src="${context:/javaScript/menu.js}"></script>
      ...

  **menu.js:**
       ...
       var currentOption=$('#activemenu').attr('name');
       if (currentOption=="menu"){
         $("#button1txt").text("${message:option1}");
       }
       ...

如何阅读“menu.js”以来的文件? 谢谢

1 个答案:

答案 0 :(得分:1)

关于扩展

例如,如果使用@Component注释,扩展仅适用于模板(.tml文件)或组件类。

组件参数文档:

https://tapestry.apache.org/component-parameters.html

您无法访问存储在服务器上的JavaScript文件。但是您可以将它们与脚本的init脚本一起传递。

如何向页面添加自定义脚本

请勿对您的模板执行此操作:

<script type="text/javascript" language="JavaScript" src="${context:/javaScript/menu.js}"></script>

请改为使用您的网页类:

@Import(library = { "context:javaScript/menu.js" })
public class Index {

}

阅读有关此功能的文档以了解详情:http://tapestry.apache.org/javascript.html

解决您的问题

凭借所有这些知识,您现在宁愿想要传递菜单脚本的翻译,如下所示:

@Import(library = { "context:javaScript/menu.js" })
public class Index {

    @Inject
    private Messages messages;

    @Inject
    private JavaScriptSupport javaScriptSupport;

    void afterRender() {

        javaScriptSupport.addInitializerCall("initMenu", new JSONObject()
            put("option1", messages.get("option1"))
        );
    }
}

menu.js

(function( $, window ) {

  'use scrict';

  $.extend(Tapestry.Initializer, {
    initMenu: function (spec) {
      var currentOption=$('#activemenu').attr('name');
      if (currentOption=="menu"){
        $("#button1txt").text(spec.option1);
      }
    }
  }
})(jQuery, window);