2015-04-03 60 views
0

我正在寻找创建一个文本字段就像使用输入助手,除了它的行为略有不同:它不会更新它绑定的属性直到按下回车键。我延长了组件,并试图重写可能会更新属性为这样的功能:ember.js:扩展Ember.TextField并只更新输入密钥的值属性

InputTextSoftComponent = Ember.TextField.extend(
    keyPress:-> 
    console.log("keypress") 
    propertyDidChange:-> 
    console.log('propChange') 
    didInsertElement:-> 
    console.log('insert') 
    modelChangedValue:-> 
    console.log('changeval') 

) 

组件工作就像一个普通的文本字段现在,这令我感到惊喜与

{{input-text-soft id="height-input" class="position-inputs" type="text" value=controller.activeRegion.width}} 

然而,我无法停止更新值目标文本字段中的更改。我怎样才能防止这种情况,并实现一种软绑定,以便输入只更新输入密钥的属性?我正在寻找特定于Ember CLI的解决方案和组件的使用。

回答

1

创建不同的绑定属性。您的不动产的别名。将您的文本框绑定到该属性。只有在按下回车键时才从别名更新房产。伪:

{{input-text-soft id="height-input" realValueBinding="controller.activeRegion.width" value=newWidth...}} 

keyPress() { 
    if (keyCode == xx) 
    this.set('realValue', this.get('newWidth')) 
} 
+0

我试图避免这一点,所以我不必为组件外的每个输入创建'脏'变量。可推测我将不得不复制值activeInition.width并将其放在另一个变量newWidth中,是否正确? – 2015-04-04 17:48:18

+0

哦,也许我可以把组件绑定到一个中间变量,它被初始化为realValue的值,所以我不必在 – 2015-04-04 17:52:16

+0

中传递值,当然你可以用任何你想要的值初始化newValue。但将textfield值绑定到属性,将会使该属性发生更改。所以除了创建一个不同的属性,如果你不想要改变原来的属性,没有别的办法。 – 2015-04-04 21:59:50