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

Есть ли так или иначе, мы можем постараться не управлять заметным кодом в немногих случаях?

How i tried? The only way i found to avoid is by adding new properties to the view as flags which will if checked before running the observable method code.

This is the basic jsfiddle link am providing with basic observer functionality 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);
11
добавлено
Просмотры: 2
nl ja de

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'
    })

See this jsfiddle for a working example: http://jsfiddle.net/NSMj8/1/

There is a good overview of observers in the ember guides: http://emberjs.com/guides/object-model/observers/

More info on how to add/remove observers is available in the API docs for Ember.Observable: http://emberjs.com/api/classes/Ember.Observable.html

11
добавлено
тот код был просто примером, чтобы работать над ним.. я действительно соглашаюсь, что мы можем добавить наблюдателя во время инициализации.. я хотел знать, есть ли так или иначе, мы можем избежать звонка наблюдателю прежде, чем установить значение к собственности...
добавлено автор thecodejack, источник
Да, вы были просто быстрее:), +1 BTW:)
добавлено автор sly7_7, источник
Не уверенный, что вы спрашиваете точно. observer' s работа состоит в том, чтобы быть зарегистрирована, когда собственность изменяется. Наверняка можно избежать звонков наблюдателям, ожидая до позже, чтобы создать их, как в вышеупомянутом примере. У изменения должен был бы быть наблюдатель, который добавляет некоторого другого наблюдателя и возможно удаляет себя. С этим в месте вы могли ' avoid' главный наблюдатель на начальном наборе собственности. Это что you' ре, идущее для?
добавлено автор Mike Grassotti, источник
Два быстрых вопроса 1. Мне должно быть нужно к removeObserver, или он будет удален, как только случай разрушен? 2. Как проверить, что наблюдатель уже добавляется на собственности?
добавлено автор Manoharan, источник