2016-10-17 29 views
1

考慮以下列表:爲屬性的更改處理沒有名字

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" 
    }]; 
} 

我想保存列表一旦它改變了(也許在幾秒鐘後,像油門一樣)。我怎樣才能在Fields類中引入一個處理程序,以便在文本框被更改後調用它?我不是在談論blur事件處理程序。

回答

2

保存在DOM input事件。使用debounce綁定行爲對保存進行速率限制。

下面是一個例子: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

謝謝,這正是我想要的。當我測試它時,它不需要是一個「表格」標籤,任何標籤都可以,對吧?在你的Gist中,表單標籤完美地工作。但在我的代碼中,只要輸入表單標記,就會發生以下錯誤:'ERROR [app-router] RangeError:超出最大調用堆棧大小。並不是說我在問如何解決問題,但如果您認爲我應該在某處報告,請告訴我。 – Mehran

+0

右鍵不需要是表單標籤。我只是爲了語義原因才使用表單和標籤 –

相關問題