【问题标题】:How to use Resource bundle(Client Bundle) in JSNI?如何在 JSNI 中使用资源包(客户端包)?
【发布时间】:2015-01-12 09:59:14
【问题描述】:

我正在尝试在 JSNI 中使用 css 资源的客户端包,但找不到任何有用的代码。 我想知道如何在 JSNI 中调用 css 资源,以及如何在 JSNI 中使用客户端包。

我的普通代码:--

 Resource.INSTANCE.button().ensureInjected();

 Resource res = GWT.create(Resource.class);

 button.setStyleName(res.button().gwtbutton());

jsni怎么写?

Here Resource---->是接口扩展clientbundle。 gwtbutton ---> 是 css。

我在此链接https://groups.google.com/forum/#!topic/google-web-toolkit/94v4tjCZiBo 中读到我们可以通过 jsni 使用 CssResource。但我不清楚他的语法用法。

【问题讨论】:

    标签: css gwt resourcebundle jsni


    【解决方案1】:

    这里没有魔法(好吧,有一点,但在幕后)。您的Resource 接口的实现是由GWT 自动生成的,因此当您调用res.button().gwtbutton() 时,它将返回您从CSS 文件引用的样式的正确名称。这个名称可能会被混淆,带有前缀等。这对你来说并不重要 - 最后它只是一个字符串,一个样式的名称。只需将其作为 String 传递给您的 JSNI 方法即可:

    public native void addStyle(String style) /*-{
        // Add style to a DOM element
    }-*/;
    
    // Invoke like so:
    addStyle(res.button().gwtbutton());
    

    如果你想在 JSNI 代码中直接使用你的 ClientBundle:

    // First, get Resource instance from a static field
    var resource = @package.Resource::INSTANCE;
    // Then, get the CssResource with the style
    var button = resource.@package.Resource::button()();
    // Finally, get the style's name
    var gwtButton = button.@package.Button::gwtButton()();
    

    package.Resource 替换Resource 接口的正确限定名(包+ 类名)。如果需要,请使用 Google Plugin for Eclipse 提供的代码完成。对button 方法返回的类型执行相同的操作(它可能是扩展CssResource 的某个接口)。

    如果您对语法感到困扰,请dig through the documentation 或查看有关 Java 原生接口的一些教程 - 它与 JSNI 有很多相似之处,并且可能有更好的文档。

    【讨论】:

    • 先生,我想直接在jsni中使用我的css。我只需要语法方面的帮助。
    • 那里有一个关于 JSNI 的官方文档以及如何从中调用 Java 代码的链接,更不用说你链接的线程中的示例了。哪一部分给你带来了麻烦?如果您使用 Eclipse 和 Ecpise 的 Google 插件,则应该有 code completion available in JSNI methods to help you build the invocation
    • 我得到的所有语法错误。我已经尝试了很多。
    • var lib = @com.ruchi.bundle.client.Resource::INSTANCE; var style = lib.@com.xyz.bundle.client.Resource::button().gwtbutton();但是通过这个我仍然无法添加css(gwtbutton)
    • 嘿抱歉,这是我的错误,即发生了类转换异常,但现在已解决。谢谢你能在enggheads.com/#!question/1421080044931回答这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多