2016-10-17 34 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

右键不需要是表单标签。我只是为了语义原因才使用表单和标签 –

相关问题