Aurelia 中基于范围的引用
scope based ref in Aurelia
我有表单的引用,它是一个自定义元素
<form ref="domRef" ...>
我也有 ref for field,这是另一个自定义元素(在表单中使用)
<input type="text" ref="domRef" .....>
但在表单视图模型的 attach() 中,我得到 this.domRef 是输入的引用。
attached(){
console.log(this.domRef);
}
因此,随着执行的进行,domRef 正在被最新的覆盖。为什么?
为什么不同范围的 domRef 没有区别?
我不能为 ref 使用不同的名称,因为所有名称都是动态生成的。
如果有其他选择,请帮助我。
Update
After Ashley's Answer:
自定义元素表单有自己的 VM,自定义元素字段也有自己的 VM。
观看次数:
<template>
<form ref="domRef">
<compose view-model="resources/elements/field" ..... containerLess>
</compose>
</form>
</template>
<template>
<input type="text" ref="domRef"></input>
</template>
视图模型:
export class Form{
..
attached(){
console.log(this.domRef); //returns Input's Ref Which is not correct
}
}
export class Field{
..
attached(){
console.log(this.domRef); //returns Input's Ref Which is correct
}
}
那么如果 domRef 属于当前 VM 为什么会这样?
scope
是您的 VM,而不是任何 HTML 元素,因此 this.domRef
将被设置为 Aurelia 将 属性 设置为的最后一个元素。
如果名称是动态生成的,难道你不能直接更改名称生成代码吗?
在挖掘了一切之后,我得到了解决方案。即在构造时初始化domRef。
export class Form{
constructor(){
this.domRef = null;
}
attached(){
console.log(this.domRef); //returns Form's Ref Which is correct
}
}
export class Field{
constructor(){
this.domRef = null;
}
attached(){
console.log(this.domRef); //returns Input's Ref Which is correct
}
}
奇怪但有效。
我有表单的引用,它是一个自定义元素
<form ref="domRef" ...>
我也有 ref for field,这是另一个自定义元素(在表单中使用)
<input type="text" ref="domRef" .....>
但在表单视图模型的 attach() 中,我得到 this.domRef 是输入的引用。
attached(){
console.log(this.domRef);
}
因此,随着执行的进行,domRef 正在被最新的覆盖。为什么?
为什么不同范围的 domRef 没有区别?
我不能为 ref 使用不同的名称,因为所有名称都是动态生成的。 如果有其他选择,请帮助我。
Update After Ashley's Answer:
自定义元素表单有自己的 VM,自定义元素字段也有自己的 VM。
观看次数:
<template>
<form ref="domRef">
<compose view-model="resources/elements/field" ..... containerLess>
</compose>
</form>
</template>
<template>
<input type="text" ref="domRef"></input>
</template>
视图模型:
export class Form{
..
attached(){
console.log(this.domRef); //returns Input's Ref Which is not correct
}
}
export class Field{
..
attached(){
console.log(this.domRef); //returns Input's Ref Which is correct
}
}
那么如果 domRef 属于当前 VM 为什么会这样?
scope
是您的 VM,而不是任何 HTML 元素,因此 this.domRef
将被设置为 Aurelia 将 属性 设置为的最后一个元素。
如果名称是动态生成的,难道你不能直接更改名称生成代码吗?
在挖掘了一切之后,我得到了解决方案。即在构造时初始化domRef。
export class Form{
constructor(){
this.domRef = null;
}
attached(){
console.log(this.domRef); //returns Form's Ref Which is correct
}
}
export class Field{
constructor(){
this.domRef = null;
}
attached(){
console.log(this.domRef); //returns Input's Ref Which is correct
}
}
奇怪但有效。