所以这是这个例子:http://emberjs.com/guides/getting-started/creating-a-new-model/
{{input type="text" id="new-todo" placeholder="What needs to be done?"
value=newTitle action="createTodo"}}
此助手使用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}}
帮助器似乎不接受其他操作。所以我决定用它的替代品替换它:
<input type="text" id="new-todo" placeholder="What needs to be done?"
value=newTitle {{action createTodo}}>
我还没有添加其他操作。但是这一变化导致createTodo
行动失败! this.get('newTitle')
getter返回undefined
。
以下是演示:http://jsbin.com/ImukUZO/205/edit请按照此处列出的步骤查看问题。
问题是:
{{input value=newTitle action="createTodo"}}
笨蛋是否会做<input value=newTitle {{action createTodo}}>
不做的魔术?创建newTitle
属性?<input value=newTitle {{action createTodo}}>
实现相同的行为,而没有在JS中明确定义newTitle
属性(就像{{input value=newTitle action="createTodo"}}
可能的那样)?奖金问题5:如何将额外事件挂钩到{{input}}
助手?例如,我可以执行<input {{action foo}} {{action bar on="mouseEnter"}}>
,我如何对{{input}}
执行相同操作?
答案 0 :(得分:1)
{{input value = newTitle action =&#34; createTodo&#34;}} heplper是否做了一些 不做的魔法? 创建newTitle属性?
输入助手(在本例中)基本上是{{view Ember.TextField value=someProperty}}
的语法糖。这与<input {{bind-attr value="someProperty"}}>
不同,因为bind-attr只是单向的(data - &gt; dom)。 Ember.TextField包含TextSupport Mixin,它观察相关事件以进行双向绑定
这种差异记录在哪里?请提供链接。
我不知道。我怀疑文档中的所有示例都使用输入助手而不是bind-attr,原因如下。
&#39; newTitle&#39;创建的属性?路线?视图?控制器?模型?
当你&#34;创造&#34;通过绑定到尚不存在的属性的属性,它将始终在当前上下文中创建。要查看当前上下文,请在模板中放置{{this}}(或{{log this}}或{{debugger}} - 这会暂停&#34;此&#34;设置为上下文)。这通常是 控制器。
有没有办法在没有在JS中明确定义newTitle属性的情况下实现相同的行为(就像{{input value = newTitle action =&#34; createTodo&#34;}}}一样?
不,要对输入进行双向绑定,需要使用输入助手或Em.TextField或子类。