bgjs初学者入门(五)一点经验

本文介绍了bgjs控件的基本命名规则及学习方法,详细解析了控件类、方法及属性的命名方式,并通过查看源代码来理解控件的具体用法。文章还探讨了控件的继承关系以及如何正确调用控件方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  通过前面的学习,我们对bgjs的控件有了一定的了解。在我学习使用bgjs的过程中,有点点经验,觉得比较适合在这里稍微小结一下,也为进一步的学习(实际上我也是边记边学)做点铺垫。

  一。bgjs的命名方法

  1.控件类的命名

  我们见过的控件类有CFloatTip,以后还将见到CDialog、 CWin、CTitlePanel等等控件。所有控件类的命名都是以一个大写的"C"开头,其后每个词语首字母都大写。

  请注意,在新版本cicy命名将会做调整。本规则仅仅适用于bgjs2.0.8版本。

  2.控件方法的命名

  在CFloatTip类中,我们看见有show(),setXY(),包括部分属性showTo、autoRender。在bgjs中,经常把方法和选项的首字母小写,其后每个词语首字母大写。我们以后还会看见onclick等事件处理,都是以on开头。

  我们需要注意一下bgjs的命名方法。有时候代码觉得没有问题,但是效果出不来,也许是拼写出了问题。

  二。bgjs的学习方法

  在学习CFloatTip控件使用方法的时候,由于没有文档,我首先看的sample,自己来推测如何使用。(bgjs很值得赞扬一点的就是,控件类、方法、属性的命名都非常浅显易懂)不过在上一节讲CFloatTip控件时候,有一些选项和方法是sample中没有的,例如setRightPosForTarget()方法,例如qmode属性。这些我是怎么总结出来的呢?

  是看源代码。

  还是打开bglib-all-debug.js,搜索CFloatTip,你会看见它的源代码(节省篇幅,省略了相当的代码)

return {
/**
*@property {Number} timeout = 2500 设置消失超时ms, 如果为0 或 false 不自动关闭.
*/
timeout:
2500,
delay :
500,
type :
"CFloatTip",
template :
'CFloatTip',
/**
*@property {Boolean} reuseable = false 是否可复用
*/
reuseable :
true,
shadow:
true,
qmode :
false,
zIndex :
10002,
hoverTipCS :
'g-small-tip',
initComponent:
function() {...},
//@override
display : function(b) {...},
setRightPosForTarget :
function(target){...},
setRightPosForHover :
function(xy){...},
_timeoutCall :
function(){...},
/**
* @param {boolean} check 是否作回收(reuseable)检查
*/
killTimer :
function(check){...},
setMsg:
function(msg, title) {...},
/**
* @override
* @param {Mixed} target
*/
show :
function(msg, title, target, getFocus, timeout){...},
_returnFtip :
function(){...},
_returnQtip :
function(){...},
tipFor :
function(proxy, msg, title){...},
onTargetMouseout :
function(evt){...},
getInstance :
function(){...}
};

  虽然我js水平很菜,很多代码都看不懂,但是有一个规律:

  1.变量:数字(字符串等)  这里是属性名和默认的值

  2.变量:function(){...}  这里是方法

  3.变量名以on开头:function(){...}  这里是处理事件的回调函数

  了解这些以后,翻翻源代码,结合示例,一个控件的使用是比较容易弄清楚的。(特别是,注释还是中文~)

  另外补充一下,,如果变量或方法的名字是以_开头的,应该都是不希望公开的方法。一般不要试图调用它们。

  三。也许细心的你会发现几个问题。

  1.在CFloatTip控件类代码中没有看见autoRender、showTo等属性和setXY()等方法,它们是哪里来的?

  答案:CFloatTip类是从bgjs提供的CPanel继承而来,而CPanel继承自CContainerBase,CContainerBase继承自CBase。setXY()方法是继承自CPanel,showTo属性继承自CContainerBase类。因此,要想完整的了解一个类所有的方法和属性,还需要了解bgjs的控件继承关系。

  bgjs继承都是通过CC.create()实现了,其中第一个参数就是基类名。

  2.我们来看一看show这个方法的实现

show : function(msg, title, target, getFocus, timeout){
/*此处代码省略 */
},

  里面的且不论,这个参数的调用仔细看看:需要传入这么多参数!

  而我们上一节的示例代码中,使用的是:

f.setXY(200,200).show();

  我们这里是直接调用了一个show(),没有传入任何参数。为什么不传入参数也可以呢?

  答案:在这个类中,保存着一些私有属性值(就是源代码中的那一个个属性对)。在show()的代码中,会自动将传入的参数和私有属性合并,再根据私有属性渲染结果。而我们在初始化类的时候,当时也传入过属性,已经根据初始化把私有属性赋值好了,因此在这里可以直接show()而不传入任何参数了。

  你可以试试,如果在初始化的时候,去掉部分属性,结果会怎么样?

  还可以试试:如果我在初始化的时候不传入msg选项的值,而在show()的对应位置传入,会不会正常显示?

  四。再补充一个问题

  在tips.html中你会看见一个方法:bindContext(),这个是起什么用呢?

  首先,这个方法不是CFloatTip类特有的(刚才的源代码里面没有),说明是从基类继承的。实际上它来自CBase。

  你可以在去掉和加入bindContext()方法,比较页面效果有什么不同。

  答案:不加入bindContext()方法,出现tip以后,在页面任意地方点击,tip不会消失;加入以后,点击则消失(就和菜单一样)!

  这个功能不是tip特有,因此放在基类中,然后通过继承来达到重用的目的。

转载于:https://www.cnblogs.com/flowthink/archive/2010/01/12/1645300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值