A plugin for Aurelia to observe computed properties without dirty-checking
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
build
dist
doc
src
test
.editorconfig
.eslintrc
.eslintrc.json
.gitignore
.jshintrc
.npmignore
LICENSE
README.md
aurelia-computed.png
config.js
gulpfile.js
jsconfig.json
karma.conf.js
package.json
tsconfig.json

README.md

aurelia-computed

aurelia-computed is a plugin for the Aurelia platform that improves the efficiency of data-binding computed properties. Binding to computed properties (properties with getter functions) typically requires dirty-checking. This plugin uses Aurelia's javascript parser to parse the body of the function, which results in an abstract syntax tree (AST). The AST is then checked for "observability" and if successful, a specialized observer is returned to Aurelia's pluggable binding system. The observer publishes change events when properties accessed by the getter function change.

What types of computed properties can this adapter observe?

One-liners that don't access anything outside the scope of the view-model are good candidates for observation by this plugin. Here's a few examples:

// "firstName" and "lastName" will be observed.
get fullName() {
  return `${this.firstName} `${this.lastName}`;
}
// "isLoggedIn", "user" and "user.name" will be observed.
get userName() {
  return this.isLoggedIn ? this.user.name : '(Anonymous)';
}
// "count" will be observed.
get shoppingCartDescription() {
  return this.count + ' ' + this.pluralize('item', this.count);
}
var _bar = 'baz';

export class Foo {

  // This property cannot be observed by aurelia-computed.  Dirty-checking will be required.
  // "_bar" can't be accessed from the binding scope.
  get bar() {
    return _bar;
  }
}

Get Started

  1. Install aurelia-computed:
jspm install aurelia-computed
  1. Use the plugin in your app's main.js:
export function configure(aurelia) {
  aurelia.use
    .standardConfiguration()
    .developmentLogging()
    .plugin('aurelia-computed', { // install the plugin
      enableLogging: true // enable debug logging to see aurelia-computed's observability messages.
    });

  aurelia.start().then(a => a.setRoot());
}

Dependencies

Platform Support

This library can be used in the browser only.

Building The Code

To build the code, follow these steps.

  1. Ensure that NodeJS is installed. This provides the platform on which the build tooling runs.
  2. From the project folder, execute the following command:
npm install
  1. Ensure that Gulp is installed. If you need to install it, use the following command:
npm install -g gulp
  1. To build the code, you can now run:
gulp build
  1. You will find the compiled code in the dist folder, available in three module formats: AMD, CommonJS and ES6.

  2. See gulpfile.js for other tasks related to generating the docs and linting.

Running The Tests

To run the unit tests, first ensure that you have followed the steps above in order to install all dependencies and successfully build the library. Once you have done that, proceed with these additional steps:

  1. Ensure that the Karma CLI is installed. If you need to install it, use the following command:
npm install -g karma-cli
  1. Ensure that jspm is installed. If you need to install it, use the following commnand:
npm install -g jspm
  1. Install the client-side dependencies with jspm:
jspm install
  1. You can now run the tests with this command:
karma start