Javascript 在Ember中获取表单内所有值的哈希
我正在提交一份表格,以便在Ember.js中创建一个新的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
评论。该表单链接到myreviews/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>