Javascript 余烬:调用输入字段上的操作,将焦点与参数一起调出

Javascript 余烬:调用输入字段上的操作,将焦点与参数一起调出,javascript,ember.js,input,helper,inline-editing,Javascript,Ember.js,Input,Helper,Inline Editing,在探索EmberJSV2.14时,我正在创建一个简单的Todo应用程序。我想内置一个手动内联编辑功能——用户将双击todo行项目文本范围,以打开一个输入字段。然后,用户将编辑todo,该todo将双重绑定到备份对象。然后,当焦点丢失时,应用程序将重新关闭输入字段,返回到新编辑的文本 下面的代码片段位于{{each}块帮助器中,几乎可以正常工作 {{#除非todo.isopenfordit} {{todo.text} {{else} {{input type=“text”value=todo.te

在探索EmberJSV2.14时,我正在创建一个简单的Todo应用程序。我想内置一个手动内联编辑功能——用户将双击todo行项目文本范围,以打开一个输入字段。然后,用户将编辑todo,该todo将双重绑定到备份对象。然后,当焦点丢失时,应用程序将重新关闭输入字段,返回到新编辑的文本

下面的代码片段位于
{{each}
块帮助器中,几乎可以正常工作

{{#除非todo.isopenfordit}
{{todo.text}
{{else}
{{input type=“text”value=todo.text action='focus-out'}
{{/除非}
工件

  • 我可以双击进入编辑模式(即使用write参数正确调用
    openForEditing()
  • 当焦点从输入字段丢失时,将正确调用操作处理程序
    closeForEditing()
零件不工作

  • 我不知道如何将todo对象模型作为参数传递,所以
    closeForEditing()
    处理程序可以执行适当的设置工作
    isopenfordit
    返回false
--

Q)在使用输入助手时,如何将参数传递给操作处理程序


Q)为了实现我的目标,我可以采取不同的方法吗?

您可以通过使用动作助手创建结束动作来curry
todo

{{input type="text" value=todo.text action=(action 'closeForEditing' todo) on='focus-out'}}

您可以通过以下方式传递操作:

 {{input type="text" value=todo.text focusOut=(action 'closeForEditing' todo)}}

谢谢,我在文档中找不到我需要的内容。@MichaelR这种类型的操作被称为关闭操作,在一系列指南中都有介绍。事实上,我只是用了你的例子,插入了必需的参数,但是你不需要在class='focus-out'上执行
action=(action'closeForEditing'todo),你只需说
focusOut即可=(action'closeForEditing'todo)`就像上面提到的答案一样。@MichaelR在你的例子中,你正在迭代
todo
,所以我相信这将是特定组件的属性,所以你可以在closeForEditing函数中说
让todo=this.get('todo')
 {{input type="text" value=todo.text focusOut=(action 'closeForEditing' todo)}}