2016-10-17 2 views
1

Betrachten Sie die folgende Liste:ändern Handler für eine Eigenschaft ohne Namen

fields.html

<div repeat.for="f of fields"> 
    ${f.name}: <input value.bind="f.value"> 
</div> 

fields.js

class Fields 
{ 
    fields = [{ 
     name: "First name", 
     value: "Jack" 
    }, { 
     name: "Surname", 
     value: "Giant slayer" 
    }]; 
} 

Ich möchte die Liste speichern sobald es geändert wird (vielleicht nach ein paar Sekunden, wie Gas geben). Wie kann ich einen Handler in die Klasse Fields einfügen, der aufgerufen wird, sobald eine der Textboxen geändert wird? Und ich spreche nicht über die blur Event-Handler.

Antwort

2

Speichern, wenn das Ereignis DOM input ausgelöst wird. Verwenden Sie das Bindungsverhalten debounce, um die Speichervorgänge zu begrenzen.

Hier ein Beispiel: https://gist.run?id=26ea2f5e3a2c35ecd96ff9aa579a893f

app.html

<template> 
    <form input.delegate="save() & debounce:500"> 
    <label repeat.for="f of fields"> 
     ${f.name}: <input value.bind="f.value"> 
    </label> 
    </form> 

    <pre><code>${log}</code></pre> 
</template> 

app.js

export class App { 
    fields = [ 
    { name: "First name", value: "Jack" }, 
    { name: "Surname", value: "Giant slayer" } 
    ]; 

    log = ''; 

    save() { 
    this.log += `Saved: ${JSON.stringify(this.fields)}\n`; 
    } 
} 
+0

Dank, es ist genau das, was ich will. Wie ich es getestet habe, muss es kein "Form" -Tag sein und irgendein Tag wird es tun, richtig? In deinem Gist funktioniert das Form-Tag perfekt. Aber in meinem Code, sobald ich das Formular-Tag eintippe, tritt der folgende Fehler auf: 'ERROR [App-Router] RangeError: Maximale Call-Stack-Größe überschritten. Nicht, dass ich frage, wie ich es beheben soll, aber wenn du denkst, ich sollte es irgendwo melden, lass es mich wissen. – Mehran

+0

Rechts - muss kein Formular-Tag sein. Ich habe Form und Label nur aus semantischen Gründen benutzt –

Verwandte Themen