在Ember中获取表单内所有值的哈希值

时间:2015-04-30 08:41:20

标签: javascript ajax forms ember.js

我正在提交表单以在Ember.js中创建新的Review。表单链接到我的reviews/new控制器上的操作。

这是我的表格:
模板/评论/ new.hbs

  <form {{action "createReview" on="submit"}}>
    {{input value=name}}
    {{input value=content}}

    <input type="submit" value="Post this review" class="button">
  </form>


我的控制器:
控制器/评论/新/ JS

import Ember from 'ember';

export default Ember.Controller.extend({
  actions: {
    createReview: function(params) {
      console.log(this.get('name'));
      console.log(this.get('content');
    }
  }
});

目前我的麻烦是以有效的方式访问表单字段值。请注意,this.get('name')会打印出name输入字段的值,而this.get('content')也会打印相同的值。

但是有一种很好的方法可以在哈希中获取所有表单字段值吗?类似于:this.get('allAttributes')会输出:

{name: "John Doe", content: "Bla bla-bla bla blaaaaah"}

修改

content是ember中的 保留字。不要为属性&#34;内容&#34;

命名

2 个答案:

答案 0 :(得分:0)

您的控制器上可能有一个用于表单的对象:

export default Ember.Controller.extend({
  formFields: Ember.Object.create(),
  actions: {
    createReview: function(params) {
      console.log(this.get('formFields.name'));
      console.log(this.get('formFields.content');
    }
  }
});

您需要使用Ember对象,以便绑定起作用。

  <form {{action "createReview" on="submit"}}>
    {{input value=formFields.name}}
    {{input value=formFields.content}}

    <input type="submit" value="Post this review" class="button">
  </form>

答案 1 :(得分:0)

评论模型是这方面的重要目标。

// reviews/new route
export default Ember.Route.extend({
  model: function() {
    return this.store.createRecord('review', {
      //predefined properties here
    }); 
  },
  actions: {
    // bubbling thru controller
    createReview: function() {
       this.get('model').save().then(function(review) {
          // action you needs if any
          self.transitionTo('reviews');
       }, function() {
          // on errors
       });
    },
    cancel: function() {
        this.transitionTo('reviews');
    }
  },
  deactivate: function() {
    var model = this.modelFor( this.routeName );
    if (model.get('isNew')) {
        model.destroyRecord();
    }
  }
});


//template
<form {{action "createReview" on="submit"}}>
  {{input value=model.name}}

  //errors example it depends of your backend and adapter
  {{#each model.errors.name as |error|}}
      <div class="error">
        {{error.message}}
      </div>
  {{/each}

  {{input value=model.content}}

  <input type="submit" value="Post this review" class="button">
  <button {{action "cancel"}}>Cancel</button>
</form>