【问题标题】:Ember: Call Action on Input Field on Focus Out with ArgumentEmber:使用参数在输入字段上调用操作
【发布时间】:2017-12-30 10:07:40
【问题描述】:

在探索 EmberJS v2.14 时,我正在创建一个简单的 Todo 应用程序。我想建立一个手动内联编辑功能——用户将双击一个待办事项行项目文本跨度,以打开一个输入字段。然后,用户将编辑待办事项,该待办事项将双重绑定到支持对象。然后当失去焦点时,应用程序将重新关闭输入字段,返回新编辑的文本。

以下代码片段位于 {{each}} 块帮助器中,它几乎可以工作。

{{#unless todo.isOpenForEdit}}
   <span {{action 'openForEditing' todo on='doubleClick'}}>{{todo.text}}</span>
{{else}}
  {{input type="text" value=todo.text action='closeForEditing' on='focus-out'}}
{{/unless}}

工作件

  • 我可以双击进入编辑模式(即 openForEditing() 使用 write 参数正确调用。)
  • 当输入字段失去焦点时正确调用动作处理程序closeForEditing()

零件不工作

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

--

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

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

【问题讨论】:

    标签: javascript ember.js input helper inline-editing


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我在文档中找不到我需要的内容。
    • @MichaelR 这种类型的动作称为闭包动作,在指南的this section 中有介绍。
    【解决方案2】:

    您可以通过使用动作助手创建关闭动作来咖喱todo

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

    【讨论】:

    • 其实我只是使用了你的例子,通过currying所需的参数,但你不需要像上面提到的答案那样做action=(action 'closeForEditing' todo) on='focus-out'' instead you can simply say focusOut=(action 'closeForEditing' todo)`。
    • @MichaelR 在您的情况下,您正在迭代 todo 所以我相信这将是特定组件的属性,因此您可以在 closeForEditing 函数中说 let todo=this.get('todo') 而不是传递。
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2016-05-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多