2013-01-09 10 views
11

観測可能なコードを実行することはほとんどありませんか?EmberJSで観測可能なプロパティを設定する方法はほとんどありません。

どのように試しましたか? 私が避けなければならない唯一の方法は、オブザーバブルメソッドコードを実行する前にチェックされたフラグとして、ビューに新しいプロパティを追加することです。

これは基本的なjsfiddleリンクですが、JS基本的なオブザーバー機能 HTML

<script type="text/x-handlebars" data-template-name="application"> 
    {{view MyApp.MyContainerView name="Santa Claus"}} 
</script> 
<script type="text/x-handlebars" data-template-name="foo"> 
    {{view.testProp}} 
</script> 

を提供しています

MyApp = Ember.Application.create({ 
    autoinit: false 
}); 

MyApp.router = Ember.Router.create({ 
    root: Ember.Route.extend({ 
     index: Ember.Route.extend({ 
      route: '/' 
     }) 
    }) 
}); 

MyApp.ApplicationController = Ember.Controller.extend({}); 

MyApp.MyContainerView = Em.ContainerView.extend({ 
    childViews: ['foo'], 

    foo: Em.View.extend({ 
     testProp: 100, 
    testPropObservable: function(){ 
    console.log("Prop Observed"); 
    }.observes('testProp'), 
     init: function() { 
      this._super(); 
      this.set('testProp', 200);//i want to avoid obeserver here 
     }, 
     templateName: 'foo' 
    }) 
}); 

MyApp.initialize(MyApp.router); 

答えて

11

1つの選択肢は、実行時にオブザーバーを追加/削除することです。 http://jsfiddle.net/NSMj8/1/

良い概要があります:値が

foo: Em.View.extend({ 
     testProp: 100, 
     testPropDidChange: function(){ 
     console.log("Value changed to: ", this.get('testProp')); 
     }, 
     init: function() { 
     this._super(); 
     this.set('testProp', 200);//i want to avoid obeserver here 
     this.addObserver('testProp', this.testPropDidChange) 
     }, 
     templateName: 'foo' 
    }) 

を初期化された後に上記の例を考えると、あなたは作業例については、このjsfiddleを参照してくださいthis.addObserverを呼び出すことにより、init()メソッド中に発射されるからオブザーバーを防ぐことができますオブザーバーを追加/削除する方法についてhttp://emberjs.com/guides/object-model/observers/

詳細情報はEmber.ObservableのためのAPIドキュメントで提供されています:http://emberjs.com/api/classes/Ember.Observable.html

+0

いや燃えさしガイドのオブザーバーのあなたはちょうど高速でした:) +1 BTW :) –

+0

そのコードはちょうどそれに取り組むための例だった..私は初期化中にオブザーバーを追加することができることに同意する...私はとにかく私たちが避けることができるか知りたいプロパティに値を設定する前にオブザーバーを呼び出す... – thecodejack

+0

正確に何を求めているのかよく分かりません。オブザーバーの「仕事」は、プロパティーが変更されたときに通知を受け取ることです。上記の例のように、後で作成するまで待ってオブザーバーへの呼び出しを避けることができます。バリエーションは、他のオブザーバーを追加し、おそらくそれ自体を削除するオブザーバーを持つことです。その場所で、あなたはプロパティの最初のセットで主なオブザーバーを '避ける'ことができます。それはあなたのために行くのですか? –