2016-08-26 5 views
1

私はemberJSで本当に新しいです、私は多くの 'これを参照してください。公式ガイドで emberオブジェクトモデルで私は 'this'を知っています。など、次のように、オブジェクト自体を表す:これはemberJSフレームワークで実際に表現されているものですか?

var obj = Ember.Object.extend({ 
    baz: { 
    foo: 'BLAMMO', 
    bar: 'BLAZORZ' 
    }, 

    something: Ember.computed('baz.{foo,bar}', function() { 
    return this.get('baz.foo') + ' ' + this.get('baz.bar'); 
    }) 
}); 

これは、次のようなモデルとしてOBJ自体が、他の場合には、意味:ある

export default Ember.Route.extend({ 
    model() { 
    this.store.push({ 
     data: [{ 
     id: 1, 
     type: 'album', 
     attributes: { 
      title: 'Fewer Moving Parts', 
      artist: 'David Bazan', 
      songCount: 10 
     }, 
     relationships: {} 
     }, { 
     id: 2, 
     type: 'album', 
     attributes: { 
      title: 'Calgary b/w I Can\'t Make You Love Me/Nick Of Time', 
      artist: 'Bon Iver', 
      songCount: 2 
     }, 
     relationships: {} 
     }] 
    }); 
    } 
}); 

何これは本当に表しますか?

答えて

2

thisは、関数がどこでどのように呼び出されたか、どのように呼び出されたか、オブジェクトが作成されたかに完全に依存します。 thisの値は、j​​avascript自体の構造であり、emberではありません。私は強くあなたがthisの詳細については、JavaScriptを読むことをお勧めします。良いjavascript開発者になるための本当に基本的なことです。ここで

が私を助けたいくつかの良いリソースです:あなたの元の質問のコードについては

、エンバー内のオブジェクトの大半は延長します基本のemberオブジェクト、およびRouteも例外ではありません。そうコードの下位ブロックに、thismodel()関数で定義されているルートオブジェクトを参照している。

+1

ような何かを行うことによって、あなたの「これ」を自分で調べていませんアクションとは 'actions'ハッシュを含むオブジェクトを指し、' actions'ハッシュ自体はデフォルトJSの動作で通常期待されるものではありません。 –

+0

ありがとう、あなたの提案はとても親切です。 – foolishfox

0

エンバーは常に与えるためにしようと、ほとんどすべての場合に、現在のオブジェクトであることを、これを。アクションでは通常のオブジェクトでもあり、計算されたプロパティやオブザーバーなどでも同じです。

唯一全く違うのはルータDSLだと思います。

あなたの両方の例では、thisが現在のオブジェクトです。 2番目の場合は、this.storeに電話できるのは、ストアがルートに挿入されているためです。言及xcskier同様

+0

あなたのアイデアが正しいです、私は多くの記事を読んで、最終的に私はjavascriptで非常に異なっている 'これは'関数のparamとして渡されるので、それ自体のコンテキストに依存します。 – foolishfox

0

、これはあなたがされた文脈に依存しています。なぜ、あなたはおそらくで `this`ことを言及する必要がありますが

console.log(this); 
+0

これは良いアイデアです! – foolishfox

関連する問題