2015-04-30 28 views
1

我正在提交表單以在Ember.js中創建新的Review。該表單與我的reviews/new控制器上的操作相關聯。在Ember中獲取表單內所有值的散列

這裏是我的形式:
模板/評論/ 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是一的餘燼保留字。不要名稱的屬性在「內容」

回答

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'); 
    } 
    } 
}); 

您需要使用灰燼對象,這樣的綁定將工作。

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

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

後續問題。比方說,OP有一個動作可以做出如下的Ajax調用: 'Ember。$。ajax('/ foo')。done(function(res){...});'。完成處理程序中有人更新'formFields'以正確更新View的正確方法是什麼? – blong

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>