2016-11-09 15 views
0

我的代码:父属性未绑定到孩子(恩伯2.8)

signup.emblem:

= validating-form onsubmit=(action 'signUp') 
    = input-field value=username 
    span {{usernameError}} 

验证-form.js:

submit(event) { 
    console.log(this.get('username') //undefined 
    this.sendAction('onsubmit') 
} 

signup.js:

actions: { 
    signUp() {  
     console.log(this.get('username')) // value from input 
    } 
    } 

正如你所看到的基本思想是输入的一些价值在验证表单组件中得到验证,然后如果一切正常,它会调用一些控制器操作或设置一些属性。

问题是,显然这个表单组件不绑定到控制器的属性,即使它的子组件(input-field)是。你能告诉我我在这里做错了什么吗?

如果我必须明确地绑定它,有没有办法一次做多个属性?

回答

0

问题是标准输入元素不是双向绑定到您的username变量。您可以使用actionmut助手快速绑定它。

(例如在车把,但你应该能够转换成徽很轻松了)

<input value={{username}} onblur={{action (mut username) value='target.value'}}> 

这话说:

  • 上onblur事件
  • MUT(ATE)的用户名
  • 匹配当前的target.value - 这是输入框的值

你可以看到这个工作的证据,这twiddle

另一种选择是Input Helpers

我没有用这些,因为他们不遵守数据向下操作的当前灰烬思可达,但它应该如此简单:

{{input value=username}} 

而这将直接以双向方式绑定用户名。

+0

在我的输入字段组件中,我已经使用了启用双向绑定的输入助手。它在'login'控制器中工作正常,然后在'validating-form'(组件覆盖它自己的用法)中断,然后在'input-field'中再次正常工作。 – Senthe

+0

好吧,我怀疑发生了什么事情是因为变量在组件和控制器之间混合,变量不会在两个地方都存在。如果表单位于组件中,并且您要在控制器中调用验证功能,那么您需要将验证功能传递到组件中。 – JonRed

+0

我以为控制器也是组件。但是我错了。 – Senthe