Closed leeight closed 6 years ago
evalExpr不适合开放吧,依赖Data的,Data并没有开放。啥场景呢
<input value="{{value}}" />
我需要获取{{value}}
的值,确切的说,我希望这样子用
attached() {
const child = this.slotChilds[0].childs[0];
if (!isComponent(child)
&& /input|select|textarea/.test(child.tagName)) {
const valueExpr = child.props.get('value');
if (!valueExpr) {
return;
}
child._onEl(getEventName(child.tagName), () => {
this.dispatch('form-element-changed', {
name: name,
value: child.evalExpr(valueExpr.expr)
});
});
}
else if (isComponent(child)) {
child.on('input', () => {
this.dispatch('form-element-changed', {
name: name,
value: child.data.get('value')
});
});
}
}
好危险的代码。。。
child是一个内部的对象,你用_onEl来绑定事件,事件fire时期望拿到这个dom上的value。你既然实际上已经care了DOM,那为啥不直接用child.el.value呢,绕一圈没必要啊。
其实我想的是万一以后我获取的是其它属性,不是 value 呢
无所谓吧,既然依赖dom就从dom上取呗
或者说比如要实现表单验证的话,在 san 里面推荐的做法是什么样的呢?
我现在是实现了两个 Component,一个是 Form,一个是 FormItem。
在 FormItem
里面主要是一个 <slot/>
和一些 validate error 之类的东西,差不多是这样子
const template = `<div class="{{mainClass}}">
<div class="${cx('label')}" s-if="label">{{label}}</div>
<div class="${cx('content')}">
<slot/>
<label class="${cx('invalid-label')}" s-if="error">{{error}}</label>
</div>
</div>`;
然后我需要在 FormItem
的 attached
回掉函数里面得到 slot
的内容,绑定一些事件(主要是输入相关的事件):
然后获取数据之后,dispatch 一个消息,Form 会收到这个消息,做出一些反馈。
然后在实现的过程中,就有这样子两个问题:
const child = this.slotChilds[0].childs[0]
是推荐的用法吗?还是以后也了能会发生变化slotChilds确实发生过变化。以前只有component上有slotChilds的,但是由于component可能包含在for里面,for是具有独立scope的,所以可能存在问题。
我觉得是两点:
接下来的话题见 #112 ,这个就关了
RT