是否持续轮询Aurelia的变化检测工作方式?

时间:2015-03-13 09:04:43

标签: aurelia

我在if.bind中得到了div,正如这个问题所建议的那样:Using literal JavaScript values in an Aurelia view。但后来我注意到viewModel上的showTemplate经常被框架检查,大约每秒10次。堆栈如下:

execute._prototypeProperties.visible.get (welcome.js:29)
getValue (dirty-checking.js:93)
isDirty (dirty-checking.js:127)
check (dirty-checking.js:63)
(anonymous function) (dirty-checking.js:49)

它应该是这样的吗?似乎不是非常有利于资源。

最好的问候,尤金。

1 个答案:

答案 0 :(得分:4)

Aurelia使用Object.observe来获取简单的Javascript属性。如果showTemplate是函数或getter / setter,那么Aurelia当前将恢复为脏检查。可以通过声明函数的依赖关系来删除它。这在此概述:https://github.com/aurelia/binding/pull/41

我创建了一个实现此功能的Aurelia Skeleton项目版本:https://github.com/ashleygrant/skeleton-navigation/tree/declare_dependencies

要实现此功能,您必须切换到使用aurelia-main属性。添加main.js文件:

import {LogManager} from 'aurelia-framework';
import {ConsoleAppender} from 'aurelia-logging-console';
import {ComputedObservationAdapter, ObjectObservationAdapter} from 'aurelia-framework';

LogManager.addAppender(new ConsoleAppender());
LogManager.setLevel(LogManager.levels.debug);

export function configure(aurelia) {
  aurelia.use
    .defaultBindingLanguage()
    .defaultResources()
    .router()
    .eventAggregator();

    aurelia.container
      .registerSingleton(ObjectObservationAdapter, ComputedObservationAdapter);

  aurelia.start().then(a => a.setRoot('app', document.body));
}

然后,在welcome.js中,添加以下import语句:

import {declarePropertyDependencies} from 'aurelia-framework';

然后在Welcome类之外添加以下方法调用:

declarePropertyDependencies(Welcome, 'fullName', ['firstName', 'lastName']);