js/libs/ember-data.js
function(callback, binding) {
    get(this, 'attributes').forEach(function(name, meta) {
      callback.call(binding, name, meta);
    }, binding);
  }
function(callback, binding) {
    get(this, 'attributes').forEach(function(name, meta) {
      callback.call(binding, name, meta);
    }, binding);
  }
Iterates through the attributes of the model, calling the passed function on each
attribute.

The callback method you provide should have the following signature (all
parameters are optional):

```javascript
function(name, meta);
```

- `name` the name of the current property in the iteration
- `meta` the meta object for the attribute property in the iteration

Note that in addition to a callback, you can also pass an optional target
object that will be set as `this` on the context.

Example

```javascript
App.Person = DS.Model.extend({
firstName: attr('string'),
lastName: attr('string'),
birthday: attr('date')
});

App.Person.eachAttribute(function(name, meta) {
console.log(name, meta);
});

prints:
firstName {type: "string", isAttribute: true, options: Object, parentType: function, name: "firstName"}
lastName {type: "string", isAttribute: true, options: Object, parentType: function, name: "lastName"}
birthday {type: "date", isAttribute: true, options: Object, parentType: function, name: "birthday"}
```

@method eachAttribute
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@static