我正在尝试制作一个显示图像标签的图像查看器,我打算使用重复模板输出标签。不幸的是我在
时遇到了这个错误Breaking on exception: Unsupported operation: can't eval an 'in' expression
通过向上移动堆栈跟踪,我能够确定正在评估的表达式是“tagList中的tag_string”,它来自此自定义元素:
<link rel="import" href="packages/polymer/polymer.html">
<polymer-element name="dartlery-viewer">
<template>
<style>
:host {
position:absolute;
left:210px;
top:0px;
border: solid 0px black;
right:0;
text-align:center;
}
div#viewer {
display:none;
}
</style>
<div id="viewer">
<img src="{{imageSource}}" />
<textarea>
<template repeat="{{tag_string in tagList}}">
tag
</template>
</textarea>
</div>
</template>
<script type="application/dart" src="dartlery_viewer.dart"></script>
</polymer-element>
这是它的课程:
import 'dart:html';
import 'dart:convert';
import 'package:polymer/polymer.dart';
import 'package:dartlery_client/dartlery.dart';
@CustomTag('dartlery-viewer')
class DartleryViewerElement extends PolymerElement {
@observable String id = "-1";
@observable String imageSource = "-1";
final List tagList = new ObservableList();
Element get _ele {
return $["viewer"];
}
DartleryViewerElement.created() : super.created() {
}
void displayFile(String id) {
HttpRequest.getString("${SERVER_ADDRESS}files/${id}").then((response) {
Map data = JSON.decode(response);
if(data["files"]!=null) {
for(Map file in data["files"]) {
_showImageData(file);
}
}
});
this.show();
this.id = id;
}
void _showImageData(Map data) {
this.tagList.clear();
this.tagList.addAll(data["tags"]);
this.imageSource = data["src"];
}
void hide() {
this._ele.style.display = "none";
}
void show() {
this._ele.style.display = "block";
}
}
我错过了一些愚蠢的东西吗?
答案 0 :(得分:2)
<textarea>
的内容被视为字符数据。模板标记在<textarea>
内没有任何意义。包含in
的表达式仅对<template repeat='{{x in y}}'>
有效,因此无法对其进行评估。
为什么不让tagList
成为字符串并指定data['tags'].join(',')
和<textarea value='{{tagList}}'></textarea>
之类的内容?