Подтвердить что ты не робот

Как установить свойство, которое можно наблюдать, но не запускать наблюдаемую функцию для нескольких случаев в EmberJS

В любом случае мы можем избежать запуска наблюдаемого кода в нескольких случаях?

Как я пробовал? Единственный способ избежать этого - добавить новые свойства к представлению в виде флагов, которые будут проверяться перед запуском кода наблюдаемого метода.

Это базовая jsfiddle ссылка, предоставляющая базовые функции наблюдателя 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>

JS

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);
4b9b3361

Ответ 1

Один из вариантов заключается в добавлении/удалении наблюдателей во время выполнения. Учитывая приведенный выше пример, вы можете запретить запуск наблюдателя во время init(), вызвав this.addObserver после инициализации значения

    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 для рабочего примера: http://jsfiddle.net/NSMj8/1/

Есть хороший обзор наблюдателей в руководствах по ember: http://emberjs.com/guides/object-model/observers/

Дополнительная информация о том, как добавлять/удалять наблюдателей, доступна в документах API для Ember.Observable: http://emberjs.com/api/classes/Ember.Observable.html