diff --git a/bricks/bar.js b/bricks/bar.js index 6b603a8..56d24f6 100644 --- a/bricks/bar.js +++ b/bricks/bar.js @@ -40,7 +40,7 @@ bricks.ChartBar = class extends bricks.EchartsExt { trigger:'axis' }, legend:{ - data:n_data + data:this.valueFields }, xAxis:{ type:'category', diff --git a/bricks/bricks.js b/bricks/bricks.js index 2632de2..a842d33 100644 --- a/bricks/bricks.js +++ b/bricks/bricks.js @@ -701,7 +701,10 @@ bricks.App = class extends bricks.Layout { let params = {'lang':this.lang}; var jc = new bricks.HttpJson(); d = await jc.httpcall(desc.url, { - "method":desc.method||'GET', params:params}); + "method":desc.method||'GET', + params:params + } + ); this.i18n.setup_dict(d); } async build(){ diff --git a/bricks/i18n.js b/bricks/i18n.js index ae715d8..765f297 100644 --- a/bricks/i18n.js +++ b/bricks/i18n.js @@ -1,53 +1,81 @@ var bricks = window.bricks || {}; bricks.I18n = class { - constructor(url, default_lang){ + /* + opts={ + i18n + lang + } + */ + constructor(opts){ /* { url: method: - default_lang + lang: + i18n_path: } */ - this.url = opts.url; - this.default_lang = opts.default_lang||'en'; + this.url = opts.url || '/i18n' + htis.i18n_path = opts.i18n_path; + this.lang = opts.lang; this.method = opts.method || 'GET'; this.lang_msgs = {}; this.msgs = {}; + this.uni18n = {}; } + _(txt, obj){ - if (this.msgs.hasOwnProperty(txt)){ - itxt = this.msgs[txt]; + var outt, mt; + var msgs = this.lang_msgs[this.lang].msgs; + if (msgs.hasOwnProperty(txt)){ + mt = msgs[txt] || txt; } if (obj instanceof Object){ - return obj_fmtstr(obj, itxt); + outt = obj_fmtstr(obj, mt); + } else { + outt = mt; + } + if (mt == txt) { + this.uni18n(txt); } return txt; } + uni18n(txt){ + var d = this.lang_msgs[this.lang].unmsgs; + if (! d[txt]){ + d[txt] = 1; + } + } is_loaded(lang){ if (objget(this.lang_msgs, lang)) return true; return false; } setup_dict(dic, lang){ - this.cur_lang = lang; - bricks.extend(this.lang_msgs, {lang:dic}); - this.msgs = dic; + this.lang = lang; + this.lang_msgs[lang] = { + msgs:dic, + unmsgs:{} + } + } + async get_lang_dic(lang){ + let params = { + lang:lang, + i18n: this.i18n_path + }; + var jc = new bricks.HttpJson(); + d = await jc.httpcall(this.url, { + "method":this.method || 'GET', + params:params + }); + this.setup_dict(d, lang); + } async change_lang(lang){ - if (objget(this.lang_msgs, lang)){ - this.msgs = objget(this.lang_msgs, lang); + if (this.lang_msgs[lang]){ return; } - - if (! this.url) return; - - let params = {'lang':lang}; - var jc = new bricks.HttpJson(); - d = await jc.httpcall(desc.url, { - "method":this.method || 'GET', - params:params - }); - this.setup_dict(d, lang); + await this.get_lang_dic(lang); } } diff --git a/docs/cn/bricks.md b/docs/cn/bricks.md index 99ff2a5..f136868 100644 --- a/docs/cn/bricks.md +++ b/docs/cn/bricks.md @@ -101,3 +101,20 @@ binds数组定义用户交互行为,每个绑定bind描述符包含以下结 | `params` | Object | 携带的数据 | --- + +### bricks 控件注册机制 + +bricks使用控件注册机制来实现识别源码中widgettype的值对应bricks的哪个控件。 + +注册实现 +bricks.Factory.register(控件名, bricks实现的控件对象)完成注册 + +### bricks的已实现控件清单 +已实现的[控件清单](widgets.md) + +### 控件扩展要求 + +* javascript class类 +* 继承自JsWidget或其子类 +* 为控件命名,并注册此控件 +