nancy
版主
积分:1372

OpenFace技术交流(第三轮:2008-08-01)

1)关于手机地图、Facebook这样的应用

17:03:06
这样 的应用用openface实现话会很困难吗?
17:03:20
我觉得不好实现。。
17:03:23
给点建议,也可以说说难度和一些要注意的难点

OpenFace 17:03:23
手机地图我曾经做过一个,
不是很难。
facebook的我觉得应该也不难

17:03:47
哦,用的到google的API吗?

OpenFace 17:04:03
不是,我们用了51地图的API
这些关键是要后台的服务

17:04:14
那后台该怎么解决?
17:04:20
需要那些技术?
17:04:38
我们自己做,还是依赖于一些公司的现有的东西?

OpenFace 17:04:54
没有什么特别,理解ajax的请求或者dataset就可以
对于一个手机地图,或者其它的web应用
在openface上开发时都需要关注两个问题:1、客户端的表现。2、后台的数据提供方式
对于客户端表现来说,做手机地图和你做一个普通的游戏没有太多差别,所以这里不重点介绍

17:08:08
哦,那后台呢,自己做是不太可能的把?

OpenFace 17:08:17
而后台的数据提供方式可能大家不是很清楚,特别是对web应用开发没有经验的来说

17:08:29
是的

OpenFace 17:08:50
有些网站它会提供一些API,比如51、google等。
这些API可能是js的,
有些可能是XML的
对于我们来说,XML的可能是最好的
js的,如果是json的数据也很好
而如果其他的比如51提供的js api,基本上无法使用
原因是它们提供的JSAPI 是基于浏览器的
我没有看到过google的API,不知道它提供什么级别的,

17:11:41
好像现在做网页上的地图开发,基本上都用google的

OpenFace 17:12:03
对于手机地图来说,如果不提供更底层的API,是无法在openface上做的

17:12:36
底层的API是什么?

OpenFace 17:12:43
你能给我一个Google的API的例子吗?

17:13:00
呵呵,不好意思,我只是看过一点,没做过

OpenFace 17:13:01
底层的API是指提供最直接数据
象51免费提供的JSAPI是做了封装的

17:13:36
学习下,

OpenFace 17:13:57
这样的话如果你在浏览器上开发很简单,一段小代码就可以实现简单的地图功能
但是openface上不行,因为openface上界面的呈现方式和浏览器不同

我之前做的,是拿到了51更底层的接口

17:15:01
哦 是没有封装前的?

OpenFace 17:15:14

17:15:17
哦,这样啊,那就需要好好研究下google的API咯


2)如何存取大量的数据信息

17:05:35
我也提一个:如何存取大量的数据信息啊?在调用的时候可以随意的调用,比如说大量的文字信息。我以前写的一个应用都是好像数据没有处理好,导致在模拟器上可以运行,但是在手机里运行的时候手机出现了白屏!!!

OpenFace 17:17:33
应该说无论在什么样的环境,什么编程语言中,一般都不应该一次性把一个大量的数据信息全部读取出来

对,所以对于你的问题,就要看具体的情况,来做具体的对待。基本的一个法则是说要哪些就去拿哪些。如果http的数据,这个很容易,后台做一些处理就可以。如果是本地的数据,则要考虑存储到数据库中(不过我们目前的版本没有提供)
呵呵,其实我这话说了和没说一样

17:19:56
恩,是的,等你新版本了,很多功能需要增加的
17:20:11
那现在没办法啦?

OpenFace 17:20:13
但是情况就是这样,不知道刘同学觉得是否还要进一步说明?
你可以考虑把本地的转成http的
这样不会影响你应用的表现
换句话说,你用http的数据来模拟一个本地数据的存储

17:21:10
那你说数据绑定中 运用的数据调用是不是用什么调用什么
还是程序启动就把所有数据都调用过来
17:21:17
这样行吗?

OpenFace 17:21:30
如果你的应用规划的好,当提供了数据库支持后,你也可以很容易转换过来
用什么调什么

17:21:43
但是提供给你们程序的时候该怎么办?

OpenFace 17:22:04
把服务器端的代码也提供

17:22:27
哦,一般是jsp和servlet吗?

OpenFace 17:22:35
当然我们不希望服务器端弄得太复杂,因为这毕竟不是我们的目的
因为openface下就有tomcat服务器,这样我们环境就很容易一样

3)如何退出当前游戏
17:15:32
退出当前游戏用什么函数?

OpenFace 17:16:02
是Upload();
Eloo.CurApp.close();

 

4)关于本地读写

17:26:38
OpenFace支持对本地文件的读写么?

OpenFace 17:26:46
不支持,这涉及到一个安全问题
以后我们会支持数据库

 

5)关于Ajax和JS
17:27:25
openface完全支持ajax吗?

OpenFace 17:31:19
有些细节还有问题,但是一般的使用是足够的

17:46:18
以前没做过ajax,就是看过点,了解

OpenFace 17:46:22
其实ajax就是一个异步请求的事情

17:46:32
对http通信什么的也没实践
17:46:45
我看的懂,但是自己写就不怎么在行了

OpenFace 17:46:49
也就是它可以一边显示,一边在后面请求数据
呵呵,这个写多了就行了

17:47:18
恩,专家推荐几本书或者文章

OpenFace 17:47:34
AJAX这块我还真没注意太多

17:47:36
我想入门快些
OpenFace 17:47:48
好像有本最简单的
17:47:56
http通信的也可以?
17:48:00
现在总感觉是摸着石头过河

OpenFace 17:48:17
AJAX 中我觉得主要还是Javascript的

17:48:28
对了,Aodbe的Flex和我们这差不多把?[相似]

OpenFace 17:48:40
其它的东西,你一天就可以搞得差不多

17:48:45
Js Dom 和 XMLHttp吧
17:48:53
意思是说 多了解js对这个很有帮助吗?

OpenFace 17:48:55
对,思路上是一样的

17:49:12
对了,Openface不完全支持DOM把

OpenFace 17:49:12
"意思是说 多了解js对这个很有帮助吗?"
也不完全是,
支持DOM1

17:49:25
我试过了,不完全支持,有些属性啊,方法不能用
17:49:29
不完全...

OpenFace 17:49:53
DOM1基本是完全支持的,你们说的有些是IE自己的,有些可能是DOM2的

17:50:06
哦,那就要多注意些啦

OpenFace 17:50:13
我大概说一下AJAX吧

17:50:48
网站的例子没具体说怎么通信的

OpenFace 17:51:07
AJAX中要理解的几个东西:XMLHttprequest对象的属性及方法。XML DOM,Javascript语法
http是不需要开发人员关注怎么通信的
对于http,你需要理解这样的一个过程
客户端发生请求,建立数据连接后,服务器产生一个应答,一般应答结束后连接就关闭了,这个连接的建立及关闭一般都不需要开发人员关注
http连接中传递http数据,这个数据分为http header和http body

17:53:38
服务器应答是指 服务器发送回给客户端数据吗?

OpenFace 17:53:42

一般http header是给客户端或者服务器端本身(比如说浏览器或者tomcat)用的
而http body是给应用(客户端代码,或者服务器端)来用的
服务器段返回是是一个XML或者html的文档

 

6)外部提供的API

17:55:18
那登陆facebook或者饭否网这样的网站?怎么利用他们的API?

OpenFace 17:55:33
我不知道他们有什么样的API
你可以举个具体的例子
你记住这样的一个原则,客户端请求时,是一个url

17:56:20
饭否网的我看了下
17:56:48
有些发送消息,添加好友啊什么啊
17:56:56
不过看起来不是js

OpenFace 17:55:44
告诉我一些得到这些API的方法,下次我去看一下

7)关于JS的定义范围
OpenFace 17:59:07
通常意义,我提到的JS是ECMA262中定义的
而大家的,则是更广义的,一般都包含了浏览器的客户端对象在里面

8)关于debug
17:31:21
那有什么办法可以debug吗

OpenFace 17:31:53
在代码中使用Debug.write("")

9)开发者心得交流
17:40:56
隆重推出我们的优秀开发者的开发心得http://www.openface.org.cn/node/226,写出了入门的各种经验,特别适合刚入门的开发者,大家有时间去看看。

17:41:27
....呃 我那个难登大雅..

17:42:22
大家都拿出来共享
开发就变的很容易了
入门对新人来说
就更快了
哈哈

 

10)关于字体
17:42:18
openface 支持 比如说粗体 斜体吗?

OpenFace 17:42:34
暂时还不支持
字体的问题比较特殊,
因为手机和pc不一样,手机上字库对内存的占用会比较大

不过我们也在考虑如何支持

17:44:21
那应该通过什么途径更好的表现文本内容呢?除了 字体大小和颜色

OpenFace 17:44:46
这个目前是没有比较好的方法了

 

11)关于翻页的问题
17:22:50
哦,还有就是对于我们即将开发的应用
17:22:58
那如果一次显示的内容过多 怎么实现滚动呢
17:23:21
是要针对现在的网络应用,比如门户网站的RSS等,还是我们自己做后台,那样应用程序可能更好一些

OpenFace 17:27:44
关于滚动条的问题

这个问题应该分两个步骤:

一、实现原理
实现原理是和细节无关的,甚至不管你用什么语言。这里大概有两种方法:
1、创建列表中所有行,控制可见行的显示。假如有一个200行的列表,每次最多只能显示10条。那么就创建200行,第一次1-10行是可以被看见的,其它的都看不见。当焦点移动11行时,11行显示,同时第1行从可见变成不可见。(之前介绍的是这种方案)
优点:思路直观,实现方便。缺点:明显浪费内存,影响速度。

2、只创建可视的行,当需要显示不可视的部分时,原来的被替换掉。即只创建10行,当焦点移动到11行时,原来的第一行实际显示的是列表中第2行的内容...。

二、实现细节
1、方案一
a、在lzx中控制行是否显示有几方法:1、设置行标签的visible属性。2、设置行标签父标签的clip属性。3、用另外的可视元素覆盖在不需显示的标签

2、方案二
a、利用数据绑定,通过控制datapath(详见Xpath的说明) 产生不同的复制视图。(这块Openface中有些bug可能会产生影响,你可以先在openlaszlo的环境中测试用法是否正确)

b、通过dataset或者AJAX对象取得数据(非http的数据则直接使用),然后在代码中对数据进行处理,并且动态控制显示的行




<script>
function getStrList(index,size){
var list=[];
for(var i=index;i list[i-index]=""+i;
}
return list;
}
]]>
</script>









this.count=count; //列表中行总数
this.focus=0; //焦点位置
this.index=0; //界面上显示的第一行在列表中的位置
this.getList=getList; //取下一个显示内容的关联函数
this.change(this.getList(0,this.max));
this.down(0);
]]>


var len=list.length;
var subs=this.subviews;
var slen;
if(subs==null){
slen=0;
}else{
slen=subs.length;
}
var max=len>slen?len:slen;
for(var i=0;i< max;i++){
if(i>len-1){
subs[i].setText("");
}else{
if(i>slen-1){
new LzText(this,{x:5,text:list[i]});
}else{
subs[i].setText(list[i]);
}

}

}
]]>


var max=this.count>this.max?this.max:this.count;

this.focus+=p;

if(this.focus< 0){
if(this.index==0){
this.index=this.count-max;
if(this.index< 0) this.index=0;
this.focus=max-1;
}else{
this.index--;
this.focus++;
}
this.change(this.getList(this.index,max));
}else if(this.focus>max-1){
if(this.index+this.focus>this.count-1){
this.focus=0;
this.index=0;
}else{
this.focus--;
this.index++;
}
this.change(this.getList(this.index,max));
}
this.moveFocus();
]]>


canvas.focus.setY(this.focus*24+2);

< iew>


this.myList.myInit(10,getStrList);


switch(key){
case 38:
this.myList.down(-1);
break;
case 40:
this.myList.down(1);
break;
}

12)关于一个具体问题的debug的一些方式
17:23:53
问个初级的问题,为什么我在网页上显示的有文字,也有选择框,但是用模拟器读dat文件就没能显示,这是什么问题呢

17:25:01
选择框是图片还是网页上的组建?

17:25:23
其实就是news那个例子的选择方框

17:26:00
哦,要是图片就要看写<resource name=" " src=" ">

17:26:11
没有使用图片

17:26:23
你是说把那个例子复制过来不能显示吗?

17:26:27
就只是画了一个框,news例子里的那个

17:26:56
我改了下,因为我想显示数据库别的地方的内容

17:27:29
哦 那你要把显示的内容放到他的数据集里不久行了

17:27:31
在网页上显示是读出来了,但是模拟器里就是空白,而且也没有选择框
17:28:04
放了啊,我改变了一下xml数据库的结构

OpenFace 17:28:18
我有点明白你的意思
你根本就没有成功在openface上运行
而不是你说的只是dat文件不行

17:29:07
那为什么用网页显示会没报错呢

OpenFace 17:29:23
你说的网页是指在webIDE上?

17:29:42
就是通过tomcat在本地显示的那个

OpenFace 17:29:51
那个是openlaszlo的环境
不是openface的环境,这个问题困惑了很多人,是我们的责任,我们在下个版本中会纠正这个问题

17:30:09
浏览器的容错性很强
17:30:22
不是什么大问题它就个你糊弄过去

17:30:18
恩,那要拿到什么地方去才能看出到底有没有问题呢

OpenFace 17:30:38
就模拟器上

17:30:34
模拟器或者手机手上

17:30:57
也就说模拟器上才是王道?

17:31:24
手机上才是

OpenFace 17:36:25
你看看你在编译时tomcat窗口有没有报什么错误

17:36:40
没有

OpenFace 17:36:41
另外启动模拟器后,你看看你的log文件中后面显示什么
你编写一个简单的hello应用,能够正常显示吗?

17:37:17

[WabaVM]: throw an exception
c:\elooplayer_symbian\superwaba55\src\native\vm\superwaba.c(2592)exceptionClass=java/lang/ClassCastException
[WabaVM]: throw an exception
c:\elooplayer_symbian\superwaba55\src\native\vm\superwaba.c(2592)exceptionClass=java/lang/ClassCastException
[WabaVM]: throw an exception
c:\elooplayer_symbian\superwaba55\src\native\vm\superwaba.c(2592)exceptionClass=java/lang/ClassCastException

17:37:33
我执行的news和hello都能运行的

OpenFace 17:37:50
ok,已经出现了java 异常,那就是具体代码的问题了

17:37:52
主要是我改了点东西,在调试
17:38:20
但是网页上说没问题,模拟器又有问题,就不知到底是出错在哪里

OpenFace 17:38:27
这说明你的环境,操作过程,都没有问题
不要用网页进行调试,会有错觉
你可以这样找问题

17:39:03
那应该怎么调试比较有效?

OpenFace 17:39:53
根据你应用的结构,把你认为可能会导致问题的地方删掉,如果删掉后没有问题,那说明问题在你删的地方
如果还有,继续删
这样可以比较快地找到问题所在

17:40:20
是啊,我一般也是这样的
17:43:25
我在网页上看到获取的内容,才能知道怎么去一层一层的取数据,但是模拟器上出问题了……

OpenFace 17:44:09
所以你需要在模拟器上一步步调试
别在网页上调试