在双向数据绑定中避免无限循环

时间:2016-05-03 18:01:40

标签: polymer polymer-1.0

我在Polymer中定义了一个datetime picker元素,如下所示:

# CoffeeScript
Polymer
  is: "date-picker"

  properties:
    # External getter/setter string interface
    startTime:
      type: String
      notify: true

    # Internal representation
    _startTime:
      type: Object
      notify: true

内部表示是因为我想维护一个代表startTime的Moment.js对象。我希望_startTime在从外部来源设置为startTime时进行更新,并在startTime更改时更新_startTime。有没有办法在不创建无限循环的情况下执行此操作?例如,使用Backbone.js,我可以通过将参数传递给非激活更新事件来实现此目的。

1 个答案:

答案 0 :(得分:0)

在有用的Polymer Slack通道上向我指出了答案。围绕标志包装更新以防止由更新事件引起的处理。

像这样:

# CoffeeScript
Polymer
  is: "date-picker"

properties:
  startTime:
    type: String
    notify: true
  _startTime:
    type: Object
    notify: true

listen:
  "startTime-changed": "onStartTimeChange"
  "_startTime-changed": "onIntStartTimeChange"

onStartTimeChange: (e) ->
  if not @_isProcessing
    @_isProcessing = true
    @set("_startTime", moment(e.detail.value))
    @_isProcessing = false

onIntStartTimeChange: (e) ->
  if not @_isProcessing
    @_isProcessing = true
    @set("startTime", e.detail.value.format())
    @_isProcessing = false