Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ember中获取表单内所有值的哈希_Javascript_Ajax_Forms_Ember.js - Fatal编程技术网

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

Javascript 在Ember中获取表单内所有值的哈希,javascript,ajax,forms,ember.js,Javascript,Ajax,Forms,Ember.js,我正在提交一份表格,以便在Ember.js中创建一个新的评论。该表单链接到myreviews/new控制器上的操作 这是我的表格: 模板/评论/new.hbs 目前,我的问题是以一种有效的方式访问表单字段值。请注意,this.get('name')会打印出name输入字段的值,而this.get('content')的值也是一样 但是有没有一种好方法可以在散列中获取所有表单字段值呢?类似于:this.get('allAttributes'),它将输出: {name: "John Doe", co

我正在提交一份表格,以便在Ember.js中创建一个新的
评论。该表单链接到my
reviews/new
控制器上的操作

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

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

但是有没有一种好方法可以在散列中获取所有表单字段值呢?类似于:
this.get('allAttributes')
,它将输出:

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


content
是余烬中的一个保留字。不要将属性命名为“content”

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

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>

{{input value=formFields.name}
{{input value=formFields.content}

审查模型是这方面的基本目标

// 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>
//评论/新路线
导出默认的Ember.Route.extend({
模型:函数(){
返回此.store.createRecord('review'{
//此处预定义的属性
}); 
},
行动:{
//冒泡通过控制器
createReview:function(){
this.get('model').save().then(函数(审阅){
//你需要的行动,如果有的话
自我转换(“评论”);
},函数(){
//论错误
});
},
取消:函数(){
这是过渡到(“审查”);
}
},
停用:函数(){
var model=this.modelFor(this.routeName);
if(model.get('isNew')){
model.record();
}
}
});
//模板
{{input value=model.name}
//错误示例它取决于后端和适配器
{{{#each model.errors.name as | error |}
{{error.message}}
{{/每个}
{{input value=model.content}
取消

后续问题。假设OP有一个操作,它发出了一个Ajax调用,比如:
Ember.$.Ajax('/foo').done(function(res){…});
。在done处理程序中,更新
formFields
以正确更新视图的正确方法是什么?
  <form {{action "createReview" on="submit"}}>
    {{input value=formFields.name}}
    {{input value=formFields.content}}

    <input type="submit" value="Post this review" class="button">
  </form>
// 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>