我在模板转发器中有几个有条件标记的元素。现在,当我更新数据时,if条件似乎没有生效,这导致undefined
被传递到处理这些元素的数据的函数中。
使用restamp
属性似乎没有帮助(https://www.polymer-project.org/1.0/docs/devguide/templates.html#dom-if)。到目前为止,我只能通过清空我的更改处理程序中的items属性(this.items = [];
)来解决这个问题,该处理程序启动了一个新的请求。
这样可行,但在显示新数据之前,模板会在很短的时间内变空。不一定是个问题,但我想知道我做错了什么。
以下是代码的相应部分:
<template>
...
<iron-ajax
id="ironajax"
url="https://www.url.com/api"
params="{{ajaxParams}}"
handle-as="json"
on-response="handleResponse"
on-error="handleError">
</iron-ajax>
...
<template is="dom-repeat" items="{{items}}" id="items">
...
<template is="dom-if" if="{{item.info.subtitle}}">:
<span>{{truncateSubtitle(item.info.subtitle)}}</span
</template>
...
Polymer({
is: 'my-element',
properties: {
query: {
type: String,
value: ''
}
...
items: {
type: Array,
value: []
}
}
...
handleChange: function() {
if (this.value !== '') {
this.items = [];
this.query = this.value;
this.$.ironajax.generateRequest();
}
}
...
答案 0 :(得分:5)
鉴于"{{item.info.subtitle}}"
,如果item.info
为null
或undefined
或item.info.subtitle
为undefined
,则绑定不会刷新且可能包含undefined
陈旧的值(在重复使用节点的情况下)。
Polymer不会对if="{{hasSubtitle(item)}}"
值执行计算,因为它在很多情况下都会提升性能,但在这种情况下它可能会很棘手。
您应该使用函数来解决正确的状态。像
这样的东西hasSubtitle function(item) {
return item.info && item.info.subtitle;
}
和
Form form2 = new Form2();
form2.webBrowser1.OnDocumentCompleted += (e, sender) =>
{
if (form2.webBrowser1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete) // each frame trigger the event (?), make sure all is done
{
form2.show();
hide();
}
};
form2.webBrowser.Navigate("{url}");
答案 1 :(得分:0)
“dom-if”的“if”属性需要布尔值。
如果“item.info.subtitle”不为空或为空,请尝试创建将设置为true或false的聚合物属性。
然后将创建的属性与dom-if:
一起使用<template is="dom-if" if="{{hasSubtitle}}" >
参考:http://polymer.github.io/polymer/ - &gt; dom-if(下拉列表)
其他信息:6月10日添加
尝试使用属性而不是方法。
声明你的财产:
Polymer({
is: "my-element",
properties: {
hasSubtitle: {
type: Boolean,
value: 'false', //false or true, the more common case.
}
},
...
});