GWT 之 jsni及利用其它Ajax代码

有个框架,本身已经提供了一些 Ajax 访问的代码。如果要自己重新写,不仅

要走 GWT RPC这样的东西,而且服务端的已有框架完全没法利用。所以,想

用 jsni 来把这部分 Ajax 代码引入进来。

 

第一步,如何把其他js include进来?

 

办法有两个。一个是在 Html里面,用

<script type="text/javascript" language="javascript" src="/xxx.js"></script>

 另外一种,我更喜欢的是放在 .gwt.xml里面,在 module的定义下面,

<script src="/xxx.js"/>
 

这样别人要用我的module,也不怕忘了引用这个外部的xxx.js。

 

第二步,如何获取其他js里面的变量?

一开始很傻,发现xxx.js里面的变量总是访问不到。看了文档才知道,

在jsni里面,只有两个变量可以直接用, $wnd和 $doc,其他js里面定义的变量,

都要通过 $wnd.xxx 这样才能获取到。


第三步,如何把 jsni 里面获取到的对象,返回到java里面?
用 ajax 获取到的对象,要把它转换为一个包含了 Record的 RecordList。
也就是说要在 JavaScriptObject 和 java 对象之间变来变去的。我的做法
如下所示:

public static native RecordList loadData() /*-{
var myAjax = new $wnd.Ajax("...");
...
var size = myAjax.getValue( "root/data/page/size");
var array = @com.smartgwt.client.util.JSOHelper::createJavaScriptArray()();
var i = 0;
for ( i=1; i<=size; i++) {
var obj = {};
obj["name"]=myAjax.getValue( "root/data/tpictures[" + i +"]/name");
var record = @com.smartgwt.client.data.Record::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(obj);
array.add( record.@com.smartgwt.client.core.DataClass::getJsObj()());
}
return @com.smartgwt.client.data.RecordList::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(array);

}-*/;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值