Edit in JSFiddle

<script type="text/x-handlebars">
  <div class="container">
    <h2>Create User</h2>
      
    {{#object-form action="updateUser" buttonLabel="Save"}}

      {{form-field label="Name" value=name}}

      {{form-field label="Email" value=email}}

      {{form-field label="Password" value=password}}

      {{form-field label="Password Confirmation" value=passwordConfirmation}}

    {{/object-form}}
      
  </div>
</script>

<script type="text/x-handlebars" data-template-name="components/form-field">
  <div class="form-group">
    <label {{bind-attr for=label}}>{{label}}</label>
    {{input type=type value=value id=label class="form-control"}}
  </div>
</script>

<script type="text/x-handlebars" data-template-name="components/object-form">
  <form {{action "submit" on="submit"}}>

    {{yield}}

    <div class="form-group">
      <button type='submit' class='btn btn-block btn-primary'>{{buttonLabel}}</button>
    </div>
  </form>
</script>
window.App = Em.Application.create()

# The object form component wraps:

App.ObjectFormComponent = Em.Component.extend
  buttonLabel: "Submit"

  actions:
    submit: ->
      @sendAction()


App.FormFieldComponent = Em.Component.extend
  type: (->
    if @get('label').match(/password/i)
      "password"
    else
      "text"
  ).property 'label'


App.ApplicationAdapter = DS.ActiveModelAdapter.extend()

App.ApplicationRoute = Em.Route.extend
  model: ->
    @store.createRecord 'user'

  actions:
    updateUser: ->
      alert "Updating user #{@currentModel.get 'name'}"


App.User = DS.Model.extend
  name:                 DS.attr 'string'
  email:                DS.attr 'string'
  password:             DS.attr 'string'
  passwordConfirmation: DS.attr 'string'