我有以下视图代码:
App.TodoView = Em.View.extend({
labelView: Em.TextField.extend({
}),
createNew:function () {
console.log(this.labelView.get('value'));
}
});
和这个模板:
{{#view App.TodoView}}
{{view labelView}}
{{#view Em.Button target="parentView" action="createNew"}}Add{{/view}}
{{/view}}
我收到以下错误:
Uncaught TypeError: Object (subclass of Ember.TextField) has no method 'get'
我也想使用insertNewLine方法,所以我可以在模板中设置Em.TextField
的值。
答案 0 :(得分:4)
问题在于您正在定义一个类并尝试从中获取value
。你最想要的是获得具体实例的value
。这可以通过将value
的{{1}}绑定到可以在LabelView
中检索的值来实现,在这种情况下App.TodoView
,请参阅http://jsfiddle.net/pangratz666/PTPsV/ :
<强>车把强>:
todoLabel
<强>的JavaScript 强>:
{{#view App.TodoView }}
<!-- Bind the value of the LabelView to todoLabel on the App.TodoView -->
{{view LabelView valueBinding="todoLabel" }}
{{#view Em.Button target="parentView" action="createNew" }}Add{{/view}}
{{/view}}
请注意,由于您要定义类App.TodoView = Em.View.extend({
LabelView: Em.TextField.extend(),
createNew: function(){
var value = this.get('todoLabel');
console.log( 'le todoLabel', value );
}
});
,因此将它写为大写是一种约定,而实例则使用lowerCase编写。请参阅The Emberist关于命名约定的好博文。
此外,要访问LabelView
上的媒体资源,您应该始终使用Ember.Object
,因此它是get
而不是this.get('todoLabel')
。
您现在可以实施其他方法,例如this.todoLabel
和insertNewline
- 请注意cancel
而不是insertNewline
,请参阅text_support。
结果如下所示,请参阅http://jsfiddle.net/pangratz666/9ZLAC/:
insertNewLine