2016-05-03 5 views
0

I DATETIME Kommissionierer Element in Polymer definiert haben, etwa so:Vermeiden von Endlosschleifen in Zweiwege-Datenbindung

# CoffeeScript 
Polymer 
    is: "date-picker" 

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

    # Internal representation 
    _startTime: 
     type: Object 
     notify: true 

Die interne Darstellung ist, weil ich ein Moment.js Objekt halten möchte, dass die darstellt startTime. Ich möchte, dass _startTime aktualisiert wird, wenn startTime von einer externen Quelle gesetzt wird und startTime aktualisiert wird, wenn _startTime geändert wird. Gibt es eine Möglichkeit, dies zu tun, ohne eine Endlosschleife zu erstellen? Mit Backbone.js würde ich dies beispielsweise erreichen, indem ich einen Parameter übergebe, der keine Update-Ereignisse auslöst.

Antwort

0

Die Antwort wurde mir auf dem hilfreichen Polymer-Slack-Kanal gezeigt. Wickeln Sie die Updates um Flags herum, um eine durch Aktualisierungsereignisse verursachte Verarbeitung zu verhindern.

Wie so:

# 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