bugfix
This commit is contained in:
parent
0ae53445e0
commit
4f5a391e03
@ -211,7 +211,7 @@ bricks.buildEventHandler = async function(w, desc, event){
|
|||||||
return bricks.buildBricksHandler(w, target, rtdata, desc);
|
return bricks.buildBricksHandler(w, target, rtdata, desc);
|
||||||
break;
|
break;
|
||||||
case 'registerfunction':
|
case 'registerfunction':
|
||||||
return bricks.buildRegisterFunction(w, target, rtdata, desc);
|
return bricks.buildRegisterFunctionHandler(w, target, rtdata, desc);
|
||||||
break;
|
break;
|
||||||
case 'method':
|
case 'method':
|
||||||
return bricks.buildMethodHandler(w, target, rtdata, desc);
|
return bricks.buildMethodHandler(w, target, rtdata, desc);
|
||||||
@ -311,7 +311,7 @@ bricks.buildBricksHandler = function(w, target, rtdata, desc){
|
|||||||
return _buildWidget.bind(w, target, target, desc.mode || 'replace', options);
|
return _buildWidget.bind(w, target, target, desc.mode || 'replace', options);
|
||||||
}
|
}
|
||||||
bricks.buildRegisterFunctionHandler = function(w, target, rtdata, desc){
|
bricks.buildRegisterFunctionHandler = function(w, target, rtdata, desc){
|
||||||
var f = objget(registerfunctions, desc.rfname);
|
var f = bricks.RF.get(desc.rfname);
|
||||||
if( ! f){
|
if( ! f){
|
||||||
bricks.debug('rfname:', desc.rfname, 'not registed', desc);
|
bricks.debug('rfname:', desc.rfname, 'not registed', desc);
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,11 +1,19 @@
|
|||||||
|
var bricks = window.bricks || {};
|
||||||
|
|
||||||
class RegisterFunction {
|
class RegisterFunction {
|
||||||
constructor(){
|
constructor(){
|
||||||
this.rfs = {};
|
this.rfs = {};
|
||||||
}
|
}
|
||||||
register(n, f){
|
register(n, f){
|
||||||
bricks.extend(this.rfs, {n:f});
|
this.rfs[n] = f;
|
||||||
}
|
}
|
||||||
get(n){
|
get(n){
|
||||||
return objget(this.rfs, n);
|
try {
|
||||||
|
return this.rfs[n];
|
||||||
|
} catch(e){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bricks.RF = new RegisterFunction();
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# 创建控件的Json文件格式说明
|
# 创建控件的Json文件格式说明
|
||||||
Bricks在服务器端使用Json文件格式存储控件描述文件,前端获得json文件后转化为json对象,并用词json对象调用widgetBuild函数创建Bricks控件。
|
Bricks在服务器端使用Json文件格式存储控件描述文件,前端获得json文件后转化为json对象,并用此json对象调用widgetBuild函数创建Bricks控件。
|
||||||
|
|
||||||
控件描述json文件必须含有“widgettype” 和”options“两个属性。“subwidgets”属性用来定义此控件包含的子控件。“binds”用于定义此控件或其子控件的事件处理
|
控件描述json文件必须含有“widgettype” 和”options“两个属性。“subwidgets”属性用来定义此控件包含的子控件。“binds”用于定义此控件或其子控件的事件处理
|
||||||
|
|
||||||
|
|
||||||
## widgettype说明
|
## widgettype说明
|
||||||
widgettype是一个字符串属性。其值为Bricks中的所有控件类型或"urlwidget"
|
widgettype是一个字符串属性。其值为Bricks中的所有控件类型或"urlwidget"
|
||||||
可用的控件类型可以在[控件类型清单](widgettypes.md)中查找
|
可用的控件类型可以在[控件类型清单](widgets.md)中查找
|
||||||
|
|
||||||
## options
|
## options
|
||||||
对象类型,每个控件有特定的options属性,清参看每个控件的说明
|
对象类型,每个控件有特定的options属性,清参看每个控件的说明
|
||||||
|
38
examples/aaa.ui
Normal file
38
examples/aaa.ui
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"btn1",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"label":"press me"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"txt1",
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"otext":"I will dispatch a event when btn1 pressed",
|
||||||
|
"i18n":true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"btn1",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"script",
|
||||||
|
"target":"txt1",
|
||||||
|
"script":"this.set_text('estrdyfguihojkl')",
|
||||||
|
"dispatch_event":"gpc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"txt1",
|
||||||
|
"event":"gpc",
|
||||||
|
"actiontype":"script",
|
||||||
|
"target":"self",
|
||||||
|
"script":"alert('yield');"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
37
examples/event_action.ui
Normal file
37
examples/event_action.ui
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"btn1",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"label":"press me"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"txt1",
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"otext":"I will dispatch a event when btn1 pressed",
|
||||||
|
"i18n":true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"btn1",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"event",
|
||||||
|
"target":"txt1",
|
||||||
|
"dispatch_event":"gpc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"txt1",
|
||||||
|
"event":"gpc",
|
||||||
|
"actiontype":"script",
|
||||||
|
"target":"self",
|
||||||
|
"script":"alert('yield');"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
6
examples/insert_text.ui
Normal file
6
examples/insert_text.ui
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"text":"urlwidget insert mode text"
|
||||||
|
}
|
||||||
|
}
|
85
examples/method_action.ui
Normal file
85
examples/method_action.ui
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{
|
||||||
|
"width":"100%",
|
||||||
|
"height":"100%"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"widgettype":"HBox",
|
||||||
|
"options":{
|
||||||
|
"height":"40px"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"changetext",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"Change text"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"smaller",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"Small size"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"larger",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"larger size"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"widgettype":"Filler",
|
||||||
|
"options":{},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"text_1",
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"dynsize":true,
|
||||||
|
"text":"original text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"changetext",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"method",
|
||||||
|
"target":"text_1",
|
||||||
|
"params":"new text",
|
||||||
|
"method":"set_text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"smaller",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"method",
|
||||||
|
"target":"app",
|
||||||
|
"method":"textsize_smaller"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"larger",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"method",
|
||||||
|
"target":"app",
|
||||||
|
"method":"textsize_bigger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
6
examples/replace_text.ui
Normal file
6
examples/replace_text.ui
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"text":"urlwidget replace mode text"
|
||||||
|
}
|
||||||
|
}
|
115
examples/rf.html
Normal file
115
examples/rf.html
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<link rel="stylesheet" href="http://localhost:80/bricks/css/bricks.css">
|
||||||
|
|
||||||
|
<!-- support IE8 (for Video.js versions prior to v7) -->
|
||||||
|
<script src="http://localhost:80/bricks/3parties/videojs-ie8.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="http://localhost:80/bricks/3parties/marked.min.js"></script>
|
||||||
|
<script src="http://localhost:80/bricks/3parties/xterm.js"></script>
|
||||||
|
<script src="http://localhost:80/bricks/3parties/video.min.js"></script>
|
||||||
|
<script src="http://localhost:80/bricks/3parties/recorder.wav.min.js"></script>
|
||||||
|
<!--- <script src="http://localhost:80/bricks/3parties/videojs-contrib-hls.min.js"></script> --->
|
||||||
|
<script src="http://localhost:80/bricks/bricks.js"></script>
|
||||||
|
<script>
|
||||||
|
/*
|
||||||
|
if (bricks.is_mobile()){
|
||||||
|
alert('wh=' + window.innerWidth + ':' + window.innerHeight);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
var myfunc = function(params){
|
||||||
|
this.set_text(params.text);
|
||||||
|
}
|
||||||
|
bricks.RF.register('setText', myfunc);
|
||||||
|
const opts = {
|
||||||
|
"widget": {
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{
|
||||||
|
"width":"100%",
|
||||||
|
"height":"100%"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"widgettype":"HBox",
|
||||||
|
"options":{
|
||||||
|
"height":"40px"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"changetext",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"Change text"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"smaller",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"Small size"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"larger",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"dynsize":false,
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"larger size"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"widgettype":"Filler",
|
||||||
|
"options":{},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"text_1",
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"dynsize":true,
|
||||||
|
"text":"original text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"changetext",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"registerfunction",
|
||||||
|
"target":"text_1",
|
||||||
|
"params":{
|
||||||
|
"text":"new text"
|
||||||
|
},
|
||||||
|
"rfname":"setText"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"smaller",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"method",
|
||||||
|
"target":"app",
|
||||||
|
"method":"textsize_smaller"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"larger",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"method",
|
||||||
|
"target":"app",
|
||||||
|
"method":"textsize_bigger"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
} };
|
||||||
|
const app = new bricks.App(opts);
|
||||||
|
app.run();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
38
examples/script_action_1.ui
Normal file
38
examples/script_action_1.ui
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"btn1",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"label":"press me"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"txt1",
|
||||||
|
"widgettype":"Text",
|
||||||
|
"options":{
|
||||||
|
"otext":"I will dispatch a event when btn1 pressed",
|
||||||
|
"i18n":true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"btn1",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"script",
|
||||||
|
"target":"txt1",
|
||||||
|
"script":"this.set_text('estrdyfguihojkl')",
|
||||||
|
"dispatch_event":"gpc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"txt1",
|
||||||
|
"event":"gpc",
|
||||||
|
"actiontype":"script",
|
||||||
|
"target":"self",
|
||||||
|
"script":"alert('yield');"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
2
examples/test.ws
Normal file
2
examples/test.ws
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
resp = 'resp:' + ws_data
|
||||||
|
ws_pool.sendto(resp)
|
88
examples/urlwidget_action.ui
Normal file
88
examples/urlwidget_action.ui
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"widgettype":"VBox",
|
||||||
|
"options":{
|
||||||
|
"width":"100%",
|
||||||
|
"height":"100%"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"widgettype":"HBox",
|
||||||
|
"options":{
|
||||||
|
"height":"40px"
|
||||||
|
},
|
||||||
|
"subwidgets":[
|
||||||
|
{
|
||||||
|
"id":"replace",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"replace mode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"insert",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"insert mode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"append",
|
||||||
|
"widgettype":"Button",
|
||||||
|
"options":{
|
||||||
|
"width":"80px",
|
||||||
|
"i18n":true,
|
||||||
|
"label":"append mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"main",
|
||||||
|
"widgettype":"Filler"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"binds":[
|
||||||
|
{
|
||||||
|
"wid":"replace",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"urlwidget",
|
||||||
|
"target":"main",
|
||||||
|
"options":{
|
||||||
|
"url":"{{entire_url('replace_text.ui')}}",
|
||||||
|
"params":{
|
||||||
|
"text":"Insert before"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"insert",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"urlwidget",
|
||||||
|
"target":"main",
|
||||||
|
"options":{
|
||||||
|
"url":"{{entire_url('insert_text.ui')}}",
|
||||||
|
"params":{
|
||||||
|
"text":"Insert before"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mode":"insert"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"wid":"append",
|
||||||
|
"event":"click",
|
||||||
|
"actiontype":"urlwidget",
|
||||||
|
"target":"main",
|
||||||
|
"options":{
|
||||||
|
"url":"{{entire_url('subtext.ui')}}",
|
||||||
|
"params":{
|
||||||
|
"text":"Append After"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mode":"append"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user