从 riot.js 中的 child 标签获取数据
Get data from child tag in riot.js
我想创建这样的标签
<mytag>
<p class={ hide: doEdit }>
<a class="icon1" onmousedown={ startEdit }></a>
<input type="text" value={ opts.value } readonly/>
</p>
<p class={ hide: !doEdit }>
<a class="icon2 onmousedown={ endEdit }></a>
<input name="editfield" type="text" value={ opts.value }/>
</p>
this.doEdit = false
startEdit(e){
this.doEdit = true
this.update()
}
endEdit(e){
this.doEdit = false
opts.value = this.editfield.value // this does not change opts.value, unfortunately
this.update()
}
</mytag>
如果它有用,我可以像这样使用它
var mydatamodel = {"input1":"email","input2":"name"}
<mytag value={ mydatamodel.input1 }></mytag>
<mytag value={ mydatamodel.input2 }></mytag>
不幸的是,这似乎不起作用。 mydatamodel.xy 没有更新,我不能给 opts.value 赋新值(没有例外,opts.value 根本不会改变它的值)。
根据 children 中 "editfield" 的新值更新 parents 模型的好方法是什么?
可以使用 this.mytag[i].editfield 访问数据。但这对于较大的表单来说不是好的解决方案。
我还尝试使用自定义事件并在 child 标记中触发它。但是,我还没有找到合适的通用解决方案来更新 parent 标签中的模型。这种方法导致了一些像 "this.mytag[i].editfield" 那样笨拙的方法。
有没有一种方法可以创建 child 标签,这样就可以编写
<mytag value={ mydatamodel.input1 }></mytag>
其中 mydatamodel.input1 在 child 标签中更改后立即更新?
感谢您的想法。
通过属性设置回调:
<my-tag
title={ globalModel.input1.title }
val={ globalModel.input1.val }
onendedit={ endEdit1 }></my-tag>
然后通过回调传回值。
endEdit (e) {
this.doEdit = false
if (opts.onendedit)
opts.onendedit(this.editfield.value)
}
看来加个外标签比较好。 See detail on plunkr
您可能也对 RiotControll 感兴趣。这是 Riot.js 的一种 Flux 解决方案,仅供参考。
更新:通过评论重写信息后的答案。
我想创建这样的标签
<mytag>
<p class={ hide: doEdit }>
<a class="icon1" onmousedown={ startEdit }></a>
<input type="text" value={ opts.value } readonly/>
</p>
<p class={ hide: !doEdit }>
<a class="icon2 onmousedown={ endEdit }></a>
<input name="editfield" type="text" value={ opts.value }/>
</p>
this.doEdit = false
startEdit(e){
this.doEdit = true
this.update()
}
endEdit(e){
this.doEdit = false
opts.value = this.editfield.value // this does not change opts.value, unfortunately
this.update()
}
</mytag>
如果它有用,我可以像这样使用它
var mydatamodel = {"input1":"email","input2":"name"}
<mytag value={ mydatamodel.input1 }></mytag>
<mytag value={ mydatamodel.input2 }></mytag>
不幸的是,这似乎不起作用。 mydatamodel.xy 没有更新,我不能给 opts.value 赋新值(没有例外,opts.value 根本不会改变它的值)。
根据 children 中 "editfield" 的新值更新 parents 模型的好方法是什么?
可以使用 this.mytag[i].editfield 访问数据。但这对于较大的表单来说不是好的解决方案。 我还尝试使用自定义事件并在 child 标记中触发它。但是,我还没有找到合适的通用解决方案来更新 parent 标签中的模型。这种方法导致了一些像 "this.mytag[i].editfield" 那样笨拙的方法。
有没有一种方法可以创建 child 标签,这样就可以编写
<mytag value={ mydatamodel.input1 }></mytag>
其中 mydatamodel.input1 在 child 标签中更改后立即更新?
感谢您的想法。
通过属性设置回调:
<my-tag
title={ globalModel.input1.title }
val={ globalModel.input1.val }
onendedit={ endEdit1 }></my-tag>
然后通过回调传回值。
endEdit (e) {
this.doEdit = false
if (opts.onendedit)
opts.onendedit(this.editfield.value)
}
看来加个外标签比较好。 See detail on plunkr
您可能也对 RiotControll 感兴趣。这是 Riot.js 的一种 Flux 解决方案,仅供参考。
更新:通过评论重写信息后的答案。