我有一个“添加资料”对话框,可让您选择要添加的内容类型。基于此,我想包含或排除某些字段。
<core-selector id="content-type" target="{{$['types']}}" itemsSelector="li" valueattr="value" selected="other"></core-selector>
<ul id="types" class="list">
<li value="announcement">Announcement</li>
<li value="event">Event</li>
</ul>
</core-selector>
我调查$
来引用我的字段,例如:
addItem(Event e) {
e.preventDefault();
CoreSelector type = $['content-type'];
CoreInput name = $['name'];
CoreInput subject = $['subject'];
CoreInput body = $['body'];
...
我正在收听对内容类型选择器的更改:
attached() {
CoreSelector type = $['content-type'];
type.addEventListener('core-select', (e) {
selectedType = type.selected;
});
}
(selectedType
是可观察的:@observable var selectedType;
。)
在模板本身中,如果我这样做:
<template if="{{selectedType == 'event'}}">
<!-- Show some additional fields here. -->
</template>
问题是$
不包含这些字段,因为在标记模板时(即填充$
时)它们不存在。
什么是解决这一问题的更好方法?
我想到的是这种将所有表单字段分配到@observable Map的方法,如下所示:https://www.dartlang.org/docs/tutorials/forms/#binding-data。对于我尝试做的事情,这会是一个更好的方法,如果是这样,我将如何适应它?