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
属性的情况下实现与
相同的行为(就像在{input value=newTitle action=“createTodo”}
中一样){{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}}>