1

私は表示用にこのコードを持っています:

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

1 に答える 1

4

問題は、クラスを定義し、そこから取得しようとしてvalueいることです。あなたが望むのはvalue、具体的なインスタンスの を取得することです。valueこれは、 のLabelViewを で取得できる値にバインドすることで実現できますApp.TodoView。この場合は、http : //jsfiddle.net/pangratz666/PTPsV/todoLabelを参照してください。

ハンドルバー:

{{#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 );
    }
});​

クラスを定義しているのでLabelView、インスタンスは小文字で書かれているのに対し、大文字で書くのが慣例であることに注意してください。The Emberistによる命名規則に関する良いブログ投稿を参照してください。

また、 のプロパティにアクセスするにはEmber.Object、常に を使用する必要があるためget、 であり、 でthis.get('todoLabel')はありませんthis.todoLabel


and のようなさらなるメソッドを実装できるようinsertNewlineになりcancelました - それはinsertNewlineand notinsertNewLineであることに注意してください

結果は次のようになります。 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 );
    }
});​
于 2012-04-21T12:10:40.067 に答える