Polymer v1.0计算的属性不重新计算

时间:2015-08-03 10:02:30

标签: javascript polymer

我有这个:

is: 'paper-filter',
properties:{
  filters:{
    computed: 'getFilters(data,byArray,obj_filters)'
  }, 

并且在obj_filters更新时不会更新 仍然没有用参数更新!= undefined

这是一个演示问题的视频

https://drive.google.com/open?id=0B2sFtTur-E_CSVBKbVdlRzZzTkE

和jsfiddle

http://jsbin.com/todonohike/edit?html,output

2 个答案:

答案 0 :(得分:1)

如果我只是更新obj_filter

  var new_obj_filters = this._setFilter(title, index, by, max, this.obj_filters);
  this.obj_filters = new_obj_filters; // no 'computed properties' are fired.

如果我克隆了对象,那就很好了:

  var obj_filters = this._setFilter(title, index, by, max, this.obj_filters);
  this.obj_filters = clone(obj_filters); // TODO why clone ??? but fixed!

答案 1 :(得分:0)

您需要使用Polymer API对obj_filters进行更改(请参阅herehere)。

例如,

obj_filters[by][title] = true

应改为

this.set(["obj_filters", by, title], true)

另请查看API description。要查找相关部分,请搜索​​"设置("。

修改

我发现了另外两个导致问题的问题。 首先声明你的计算属性如下(注意*)。

filters:{
    computed: 'getFilters(data,byArray,obj_filters.*)'
},

其次,当您第一次致电this.set(["obj_filters",by,title], true); obj_filters.by尚未定义时,obj_filters.by.title无法设置,因为该路径不存在。解决这个问题的一种方法是首先初始化它。

if (!this.obj_filters[by]) {
    this.set(["obj_filters",by], {});
}
this.set(["obj_filters",by,title], true);