Comments (8)
原则
这个问题,我整理标准草案的时候漏写了,是我的疏忽。
我的设想是:永远是用户通过JS传的参数优先,无论是new时还是运行中set时
。
实现
对于构造函数,初始化options的时候,如果满足下面条件,才从main上读:
1.属性不存在
2. 有main时
from esui.
简单来说就是
- 默认值
- 从
main
上拿来的值 - 构造函数传进来的值
然后按优先级由低到高给合在一起,再进行后续的逻辑对吧?
那么我建议控件里加一个抽象方法getOptionsFromMain
,然后helper.init
来完成这件事
from esui.
然后按优先级由低到高给合在一起,再进行后续的逻辑对吧?
对的,我也是这么觉得。
我的建议是:增加个initOptions(control, options, defaultOptions)
吧,在里面做getOptionsFromMain呗。helper.init
现在是存在的,我觉得可以helper.init调用initOptions
from esui.
可以,但initOptions
这个方法是返回options还是直接往自己身上加了?如果是前者,这名字不适合……
from esui.
当然是后者咯
from esui.
我重新整理了一下,其实一共是有4个层级的,优先级 从低到高 依次是:
- 默认的选项
- 从
main
上取得的部分选项,如href
之类的 - 构造函数传进来的选项
- 从
main
上取得的只读的固定的选项,如mode
、tagName
之类的
最后一个有点特殊,因为有些属性是有main
了以后就固定了的,比如<input>
元素的type
属性,这些东西是不能被构造函数传进来的参数所覆盖的。
我写了一下Label
,大概是这样一个逻辑, @errorrik 看看对不对:
Label.prototype.initOptions = function (options) {
options = options || {};
var defaults = {
tagName: 'span'
};
if (options.main) {
var extracted = {
content: options.main.innerHTML
};
require('./lib').extend(defaults, extracted);
}
require('./lib').extend(defaults, options);
// 如果已经有对应的元素,则`tagName`是只读的不可被覆盖
if (options.main) {
defaults.tagName = options.main.nodeName.toLowerCase();
}
this.setProperties(defaults);
};
from esui.
嗯,没问题,4的情况貌似很少会出现。
from esui.
关于构建时的顺序已经实现,按new -> createMain -> initOptions
来,initOptions
中已经不需要options.main
的判断了
from esui.
Related Issues (20)
- 日程投放控件 HOT 4
- InputCollection 应当继承 ControlCollection HOT 1
- Table 的 overflowX 属性为非 hidden 的时候多出一个横向滚动条 HOT 3
- BoxGroup有一处事件没使用addDOMEvent绑定
- 解决set和setProperties触发change的问题
- Table的依赖不全
- 控件初始化子控件时的valueReplacer管理
- 控件初始化子控件时的valueReplacer管理
- 控件初始化子控件时的valueReplacer管理
- 指定元素的销毁子控件
- Select 控件对于value比较判断的兼容性问题 HOT 2
- 希望能添加一些布局相关的组件 HOT 4
- 对于带有数据源的控件是否应该支持外部不提供数据源的场景的表决 HOT 19
- addChild的时候添加校验 HOT 6
- viewContext的疑问 HOT 3
- 加个Lisence HOT 1
- MonthView的年月下拉框格式可调 HOT 1
- 渐变背景的问题
- Panel控件的addContent方法不适用table布局 HOT 2
- 关于拓展组件
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from esui.