我正在尝试在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。但我不清楚他的用法是什么语法。
答案 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有很多相似之处,可能会有更好的文档记录。