获取并设置TextField的值

时间:2012-04-21 08:35:52

标签: ember.js

我有以下视图代码:

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的值。

1 个答案:

答案 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.todoLabelinsertNewline - 请注意cancel而不是insertNewline,请参阅text_support

结果如下所示,请参阅http://jsfiddle.net/pangratz666/9ZLAC/

insertNewLine