Polymer 聚合物1.x的dom if问题

Polymer 聚合物1.x的dom if问题,polymer,polymer-1.0,Polymer,Polymer 1.0,我在一个模板转发器中有几个有条件标记的元素。现在,当我更新数据时,if条件似乎没有生效,这导致未定义被传递到处理这些元素的数据的函数中 使用restamp属性似乎没有帮助()。到目前为止,我只能通过清空发起新请求的更改处理程序中的items属性(this.items=[];)来解决这个问题 这是可行的,但会导致在显示新数据之前,模板在短时间内为空。不一定是个问题,但我想知道我是否做错了什么 以下是代码的相应部分: <template> ... <iron-ajax id="

我在一个模板转发器中有几个有条件标记的元素。现在,当我更新数据时,if条件似乎没有生效,这导致
未定义
被传递到处理这些元素的数据的函数中

使用
restamp
属性似乎没有帮助()。到目前为止,我只能通过清空发起新请求的更改处理程序中的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();
    }
  }
...

...
...
...
: 
{{truncateSubtitle(item.info.subtitle)}dom if的“if”属性需要一个布尔值

尝试创建一个聚合物属性,如果“item.info.subtitle”不为空或null,则该属性将设置为true或false

然后,在以下情况下,将创建的属性与dom一起使用:

<template is="dom-if" if="{{hasSubtitle}}" >
给定
“{item.info.subtitle}}”
,如果
item.info
null
未定义
item.info.subtitle
未定义
,则绑定将不会刷新,并且可能具有过时的值(在重复使用节点的上下文中)

Polymer不会对
未定义的
值执行计算,因为在很多情况下这是一种性能增强,但在这种情况下可能会很棘手

您应该使用函数来解析正确的状态。差不多

if="{{hasSubtitle(item)}}"


请发布您的代码。谢谢sam_dw。我在“if”中放了一个方法,它返回一个布尔值。但这似乎并不能解决问题…@north,尝试属性而不是方法。再次检查我的答案,我正在添加新信息。非常感谢sam_dw,但问题仍然存在。我可能做错了什么。与简单地将JSON响应传递给模板相比,创建这些属性似乎有点绕道。您是否检查了是否正确检索JSON?您是否尝试使用“lastResponse”访问数据?看看这个演示代码:再次感谢,sam_dw。使用“lastResponse”似乎也没有什么不同。我想说,接收JSON不是问题,因为如果我重置“this.items”,一切都很好。由于某种原因,dom if不为我工作。顺便说一句:我的代码在Polymer 0.5、core ajax和以前的模板if实现中工作得很好。谢谢它的工作!我只是好奇,为什么在这种情况下我们需要
{{}
[[]]
if="{{hasSubtitle(item)}}"
hasSubtitle function(item) {
  return item.info && item.info.subtitle;
}