2017-01-30 8 views
0

に取り組んでいない:このアプリケーションでMock Appエンバーオブザーバは、私が直面しています、状況を説明するためのモックアプリケーション作成したネストされたプロパティ

を。私は、単一のブール値プロパティとそのプロパティ(x)を切り替える機能を持つサービスを作成しました。 2つのコンポーネント(1つはサービスのプロパティをトグル、もう1つはトグルの数を観察してそれを表示する)。オブザーバーはtoggle-observerです。サービスのプロパティに直接追加されます:myService.x。コードはそのまま動作していません。ただし、行14のコメントがtoggle-observer.jsの場合はコメントアウトされています。観察者は作業を開始する。

私の質問は、私はそれが動作を取得するために、ネストされたオブザーバーのプロパティのパス全体にgetを実行する必要がないということですか?これは期待される行動ですか?もしそうなら、なぜ誰かが説明することができますか?私の最高の思い出。

注:これは、ケースを説明するための模擬例です。それは私が実際のアプリで設計しているものとは関係ありません。私は可能な限りオブザーバーを避けようとしています。しかし、私はsthを試している間、この状況に遭遇しました。それに尋ねることにしました。

答えて

1

service

燃えさしガイドから注入された特性は、ロードされた遅延です。サービスが明示的に呼び出されるまで にインスタンス化されないことを意味します。したがって、あなたはそうしないと、未定義を得るかもしれない関数get を使用して、コンポーネント内のサービスにアクセスする必要が 。

emberガイドより、unconsumed computed properties do not trigger observers。 上記の二つの概念を組み合わせることで、我々は以下の結論を出すことができ、

明示的get関数を呼び出すか、テンプレートでそれを使用するまで、それはundefinedになりますので、あなたがtoggle-observerコンポーネント内のプロパティのmyServiceいずれかを使用していません。

のプロパティをtoggle-observerのコンポーネントに使用しない限り、オブザーバをトリガしません。あなたは、どちらかのトグルobserver.hbsファイルまたはinit方法でそれを消費する必要があります。

+1

応答をありがとう。注入された特性に関連する部分のみが怠惰である。なぜなら私のコードには消費されていない計算量がないからです。それにもかかわらず、私はコードがそのまま動作することを期待していただろう。何もせずにサービスを受けるだけで、問題が解決されるからです。 – alptugd

+0

はい。あなたが正しいです。一般的にはどちらもトラップです – kumkanillam

関連する問題