【问题标题】:Polymer: Observing array mutations with complex observer聚合物:用复杂的观察者观察阵列突变
【发布时间】:2017-02-10 03:31:13
【问题描述】:

我想要一个复杂的观察者来观察数组和属性的变化:

properties: {
  list: {
    type: Array,
    value: ["foo"],
  },
  prop: {
    type: Number,
    value: 10,
  }
},

observers: [
  'onChange(prop, list.splices)',
],

onChange: function() {
  console.log('something changed!');
},

这仅在原始列表发生更改后才有效,但不会在两个属性都初始化后触发,也不会在 prop 在原始列表发生任何更改之前发生更改时触发。

奇怪的是,如果我放置两个观察者,一个用于prop,一个用于list.splices,它们会按预期工作,在初始化时被触发。 (编辑:这种行为有an issue

同时观察数组突变和属性变化的正确方法是什么?

【问题讨论】:

    标签: javascript arrays polymer polymer-1.0 observers


    【解决方案1】:

    我目前的解决方法是让两个观察者调用相同的函数:

    observers: [
      'onChange(prop, list.splices)',
      'onChange(prop, list)',
    ],
    

    【讨论】:

      【解决方案2】:

      试试这个

      observers: [
        'onChange(prop, list.*)',
      ],
      

      【讨论】:

      • 不错。我觉得如果列表太大或项目太复杂,使用通配符可能会影响性能。但我找不到任何支持这一点的信息,你知道吗?
      • 根据Polymer's 文档wildcards 用于观察mutationsub-properties 的更改。因此,与splice 相比,它应该会对性能产生影响,但不确定它会根据列表的大小产生多大的影响。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2017-10-03
      • 2012-05-20
      • 2017-03-13
      • 2018-08-06
      相关资源
      最近更新 更多