我想通过其他自定义元素( localized_element )更新自定义元素( signin_element )中的属性标签。但属性标签在操作期间已将类型从Map更改为String。
说明:
1 /应用程序启动后,自定义元素(signin-element)使用Map更新属性标签(请参阅文件signin.dart)。
2 /初始化自定义元素 localized-element 后,使用外部json文件中的新Map更新属性标签。方法更新无法为属性标签分配新地图,因为现在是字符串。
铬回报警告:
signin-element上的属性是在Polymer之前绑定的数据 升级元素。这可能会导致绑定类型不正确。
localized-element的属性是在Polymer之前绑定的数据 升级元素。这可能会导致绑定类型不正确。
最后返回一个错误:
Class 'String' has no instance method '[]='.
Signin.html:
<core-animated-pages selectedindex="0" notap id="core_animated_pages">
<section id="section1" layout horizontal active center-justified center>
<core-card id="core_card" layout vertical>
<paper-input label="Your email addres" floatinglabel id="email_input"></paper-input>
<paper-input label="Your password" floatinglabel id="password_input"></paper-input>
<div id="div" layout horizontal end-justified>
<paper-fab icon="check" id="paper_fab"></paper-fab>
</div>
<h2>{{labels['hello']}}</h2>
</core-card>
</section>
</core_animated_pages>
<localized-element id="l10n" locale={{locale}} labels={{labels}}></localized-element>
signin.dart
@CustomTag('signin-element')
class Signin extends PolymerElement {
@published String locale = 'en';
@observable Map labels = toObservable({
'hello': 'Hello 1'
});
Signin.created() : super.created();
}
localized.dart
@CustomTag('localized-element')
class Localized extends PolymerElement {
@published String locale = 'en';
@published Map labels;
Localized.created() : super.created();
ready() {
super.ready();
_loadTranslations();
}
update() {
if (!_l10n.containsKey(locale)) return;
var l10n = _l10n[locale];
labels['hello'] = l10n['hello'];
}
List locales = ['en', 'fr'];
_loadTranslations() {
locales.forEach((l10n)=> _loadLocale(l10n));
}
Map _l10n = {};
_loadLocale(_l) {
HttpRequest.getString('i18n/translation_${_l}.json')
.then((res) {
_l10n[_l] = JSON.decode(res);
update();
})
.catchError((Error error) {
print(error.toString());
});
}
}
答案 0 :(得分:3)
我认为你需要改变
@published Map labels;
在localized.dart中
@PublishedProperty(reflect: true) Map labels;
与locale
答案 1 :(得分:1)
Günter找到了解决方案,如果您遇到同样的问题,我会推动代码更改。
首先,将聚合物依赖关系更新为dev:
polymer: '>=0.12.0-dev <0.13.0'
其次,从localized.dart替换@published
@PublishedProperty(reflect: true) String locale = 'en';
@PublishedProperty(reflect: true) Map labels;
并在文件signin.dart
中@PublishedProperty(reflect: true)