<!DOCTYPE html>
<html>

  <head>
    <script src="https://cdn.rawgit.com/js-data/js-data/master/dist/js-data.js"></script>
    <script src="script.js"></script>
  </head>

  <body>
    <h1>Open up your console to see the output</h1>
  </body>

</html>
var store = new JSData.DS();

var User = store.defineResource({
  name: 'user',
  computed: {
    fullName: ['first', 'last',
      function(first, last) {
        return first + ' ' + last;
      }
    ]
  }
});

var user = User.createInstance({
  first: 'John',
  last: 'Doe'
});

console.log('user (not injected)', JSON.stringify(user, null, 2));
console.log('user.fullName: ' + user.fullName); // undefined

console.log('run User.compute(user);');
User.compute(user);

console.log('user.fullName: ' + user.fullName); // "John Doe"

var user2 = User.inject({
  id: 2,
  first: 'Jane',
  last: 'Doe'
});
console.log('user2 (injected)', JSON.stringify(user2, null, 2));
console.log('user2.fullName: ' + user2.fullName); // "Jane Doe"

console.log('run User.compute(1);');
User.compute(1);

console.log('user2.fullName: ' + user2.fullName); // "Jane Doe"

// if you don't pass useClass: false then you can do:
var user3 = User.createInstance({
  first: 'Sally',
  last: 'Doe'
});
console.log('user3 (not injected)', JSON.stringify(user3, null, 2));
console.log('user3.fullName: ' + user3.fullName); // undefined
console.log('run user3.DSCompute();');
user3.DSCompute();
console.log('user3.fullName: ' + user3.fullName); // "Sally Doe"
## DS#compute(resourceName, instance)

Force the given instance or the item with the given primary key to recompute its computed properties.

###### Arguments

| name | type | description |
| ---- | ---- | ----------- |
| resourceName | string | The name of the resource to use. Unnecessary if using the resource directly. |
| instance | object or string or number | Instance or primary key of the instance (must be in the store) for which to recompute properties. |

###### Examples

```js
var User = store.defineResource({
  name: 'user',
  computed: {
    fullName: ['first', 'last', function (first, last) {
      return first + ' ' + last;
    }]
  }
});

var user = User.createInstance({ first: 'John', last: 'Doe' });
user.fullName; // undefined

User.compute(user);

user.fullName; // "John Doe"

var user2 = User.inject({ id: 2, first: 'Jane', last: 'Doe' });
user2.fullName; // undefined

User.compute(1);

user2.fullName; // "Jane Doe"

// if you don't pass useClass: false then you can do:
var user3 = User.createInstance({ first: 'Sally', last: 'Doe' });
user3.fullName; // undefined
user3.DSCompute();
user3.fullName; // "Sally Doe"
```