2012-04-21 41 views
1

的设定值,我有鉴于这样的代码:获取和TextField

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

回答

4

问题是你正在定义一个类并试图从中获取value。你想要的是获得具体实例的value。这可以通过结合LabelView到其然后可以在App.TodoView被检索,在这种情况下todoLabel一个值的value来实现,见http://jsfiddle.net/pangratz666/PTPsV/

把手

{{#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}} 

的JavaScript

App.TodoView = Em.View.extend({ 
    LabelView: Em.TextField.extend(), 

    createNew: function(){ 
     var value = this.get('todoLabel'); 
     console.log('le todoLabel', value); 
    } 
});​ 

注意,因为你要定义一个CL屁股LabelView这是一个约定,写在大写,而实例写在lowerCase。在The Emberist的博客文章中看到一篇关于命名约定的好文章。

此外,要访问Ember.Object上的财产,您应始终使用get,因此它的编号为this.get('todoLabel')而不是。


您现在可以实施进一步的方法如insertNewlinecancel - 注意这insertNewline,而不是insertNewLine,看到text_support

结果是这样的,看到http://jsfiddle.net/pangratz666/9ZLAC/

App.TodoView = Em.View.extend({ 
    LabelView: Em.TextField.extend({ 
     insertNewline: function(){ 
      this.get('parentView').createNew(); 
     },    
     cancel: function(){ 
      this.set('value', ''); 
     } 
    }), 

    createNew: function(){ 
     var value = this.get('todoLabel'); 
     console.log('le todoLabel', value); 
    } 
});​ 
+0

THX了很多,很大的答案!可能是我的问题很愚蠢,但是烬文件太差了。希望他们改进。 – bravedick 2012-04-21 20:01:02

+0

很高兴我能帮到你。文件不断改进。在此之前,SO是一个很好的帮助资源。 – pangratz 2012-04-21 20:15:06

相关问题