如何在JSNI中使用资源包(Client Bundle)?

时间:2015-01-12 09:59:15

标签: css gwt resourcebundle jsni

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

我的普通代码: -

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

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

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

如何用jsni写?

这里的资源---->是接口扩展clientbundle。 gwtbutton --->是css。

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

1 个答案:

答案 0 :(得分:3)

这里没有魔法(好的,有一点,但在幕后)。您的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 Native Interface的一些教程 - 它与JSNI有很多相似之处,可能会有更好的文档记录。