Ember.js {{input value=someProperty}}神奇地定义了一个属性?我是否可以通过<;输入{bind attr value=";newTitle";}}}>;?

Ember.js {{input value=someProperty}}神奇地定义了一个属性?我是否可以通过<;输入{bind attr value=";newTitle";}}}>;?,ember.js,Ember.js,下面是一个例子: 此帮助程序使用newTitle属性。这个属性没有在JS代码中的任何地方定义,只在模板中定义(具体在{input}帮助程序中)。但此属性是在JS代码中访问的: Todos.TodosController = Ember.ArrayController.extend({ actions: { createTodo: function() { // Get the todo title set by the "New Todo" text field

下面是一个例子:

此帮助程序使用
newTitle
属性。这个属性没有在JS代码中的任何地方定义,只在模板中定义(具体在
{input}
帮助程序中)。但此属性是在JS代码中访问的:

Todos.TodosController = Ember.ArrayController.extend({
  actions: {
    createTodo: function() {
      // Get the todo title set by the "New Todo" text field
      var title = this.get('newTitle');
      // ...
    }
  }
});
我决定在此输入上添加一个附加操作。但是
{{input}
助手似乎不接受其他操作。所以我决定用HTML替代它:

<input type="text" id="new-todo" placeholder="What needs to be done?" 
          value=newTitle {{action createTodo}}>

我还没有添加其他操作。但此更改导致
createTodo
操作失败!
this.get('newTitle')
getter返回
undefined

这里有一个演示:请按照这里概述的步骤来查看问题的实际情况

问题是:

  • {{input value=newTitle action=“createTodo”}
    helper是否具有
    所没有的魔力?创建
    newTitle
    属性
  • 这种差异记录在哪里?请提供一个链接
  • “newTitle”属性在何处创建?路线?看法控制器?模特儿
  • 有没有一种方法可以在JS中不显式定义
    newTitle
    属性的情况下实现与
    相同的行为(就像在
    {input value=newTitle action=“createTodo”}
    中一样)
  • 附加问题5:如何将额外事件挂接到
    {{input}
    帮助程序?例如,我可以执行
    ,如何使用
    {{input}}
    执行相同的操作

    {{input value=newTitle action=“createTodo”}}helper是否执行一些操作 魔法不行吗? 创建newTitle属性

    输入助手(在本例中)基本上是
    {{view Ember.TextField value=someProperty}
    的语法。这与
    不同,因为bind attr只是单向的(数据->dom)。TextField包括观察相关事件以实现双向绑定的

    这种差异记录在哪里?请提供一个链接

    我不知道。我怀疑文档中的所有示例都使用input helper而不是bind attr,正是出于这个原因

    “newTitle”属性在何处创建?路线?看法控制器?模特儿

    当您通过绑定到尚不存在的属性来“创建”属性时,它将始终在当前上下文中创建。要查看当前上下文,请将{this}}放在模板中(或{{log this}或{{debugger}}-在将“this”设置为上下文时暂停)。这通常是控制器

    有没有一种方法可以在JS中实现相同的行为,而无需显式定义newTitle属性(就像使用{{input value=newTitle action=“createTodo”}一样)

    不,要对输入进行双向绑定,需要使用input helper或Em.TextField或子类

    <input type="text" id="new-todo" placeholder="What needs to be done?" 
              value=newTitle {{action createTodo}}>