Ember.js 如何在EmberJS中为少数情况设置可观察但不运行可观察函数的属性

Ember.js 如何在EmberJS中为少数情况设置可观察但不运行可观察函数的属性,ember.js,Ember.js,在少数情况下,我们是否可以避免运行可观察代码 我是如何尝试的? 我发现唯一可以避免的方法是将新属性作为标志添加到视图中,如果在运行observable方法代码之前进行了检查,则会将新属性作为标志添加到视图中 这是am提供基本观察者功能的基本链路 HTML <script type="text/x-handlebars" data-template-name="application"> {{view MyApp.MyContainerView name="Santa Claus"

在少数情况下,我们是否可以避免运行可观察代码

我是如何尝试的? 我发现唯一可以避免的方法是将新属性作为标志添加到视图中,如果在运行observable方法代码之前进行了检查,则会将新属性作为标志添加到视图中

这是am提供基本观察者功能的基本链路 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>

一种替代方法是在运行时添加/删除观察者。在上面的示例中,您可以在初始化值后调用
this.addObserver
,防止在init()期间触发observer

    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'
    })
有关工作示例,请参见此JSFIDLE:

《余烬指南》中对观察员有一个很好的概述:


有关如何添加/删除观察者的更多信息,请参见Ember的API文档。可观察:

是的,您的速度更快:),+1顺便说一句:)这段代码只是一个例子。我同意我们可以在初始化期间添加observer。我想知道,在设置属性值之前,我们是否可以避免调用observer…不确定您到底在问什么。观察者的
工作是在属性发生变化时获得通知。当然,您可以通过等待稍后创建观察者来避免调用观察者,如上面的示例所示。一种变化是有一个观察器,它可以添加一些其他观察器,也可以删除自身。有了它,您就可以“避开”属性初始集上的主要观察者。这就是你想要的吗?两个简单的问题1。我是否需要删除Observer,或者在实例被销毁后将其删除?2.如何检查已在属性上添加了观察者?
    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'
    })