2015-01-15 29 views
0

參考http://emberjs.com/api/data/classes/DS.Errors.html爲什麼錯誤不會顯示在模板上?

我有一條路線checkout.address這使得app/templates/checkout/address.hbs。它具有如下:

  1. 兩種形式
  2. 一種形式,允許用戶創建一個新的 地址
  3. 一個形式爲每個現有的地址,這樣用戶可以在 編輯任何他們

當我嘗試創建或更新地址時,使用無效值。由於API返回驗證錯誤,該應用程序投訴。這是預期的。在灰燼督察的Network標籤證實API的形式返回的錯誤:

errors: Object 
    street: Array 
    0: can't be blank 

然而,這些錯誤不顯示任何形式。我會期望下面的行做到這一點:

{{#each error in errors.street}} 
    <br />{{error.message}} 
{{/each}} 

我在做什麼錯了?

代碼:

// app/router.js 
import Ember from 'ember'; 
import config from './config/environment'; 

var Router = Ember.Router.extend({ 
    location: config.locationType 
}); 

Router.map(function() { 
    this.route('checkout', function() { 
    this.route('address'); 
    }); 
}); 

export default Router; 

// app/controllers/checkout/address.js 
import Ember from 'ember'; 

// export default Ember.ArrayController.extend({ 
export default Ember.ObjectController.extend({ 
    actions: { 
    create: function() { 
     var _this = this; 

     // this.get('model').save().then(function(address){ 
     this.store.createRecord('address', { 
     street: this.get('street') 
     }).save().then(function(address){ 
     // address.save().then(function(address){ 
     _this.transitionToRoute('addresses.index', address); 
     }, function(errors) { 
     // console.log(errors); 
     // Need this promise, so we can render errors, if any, in the form 
     // console.log('error'); 
     }); 
    }, 

    update: function(address) { 
     var _this = this; 

     address.set("street", address.get('street')); 

     address.save().then(function(){ 
     _this.transitionToRoute('checkout.address'); 
     }, function() { 
     console.log('here'); 
     // Need this promise, so we can render errors, if any, in the form 
     }); 

     return false; 
    } 
    } 
}); 

// app/templates/checkout/address.hbs 
<h1>Addresses</h1> 

<p>Create address:</p> 

<form {{action "create" on="submit"}}> 
    <p> 
    <label>Street: 
     {{input value=street placeholder="Foo street"}} 
    </label> 

    {{#each error in errors.street}} 
     <br />{{error.message}} 
    {{/each}} 
    </p> 
    <input type="submit" value="Create"/> 
</form> 

<ul> 
    {{#each model}} 
    <li> 
    Address: {{street}} 

    <form {{action "update" this on="submit"}}> 
     <label>street: 
      {{input value=street placeholder="Foo Street"}} 
     </label> 

     {{#each error in errors.street}} 
      <br />{{error.message}} 
     {{/each}} 
     </p> 
     <input type="submit" value="Update"/> 
    </form> 
    </li> 
    {{/each}} 
</ul> 
+0

嗯 - 它應該工作,然後...你可以把它扔進一個jsbin? – Kalman 2015-01-15 17:26:39

+0

我認爲這是問題所在。 'create'動作不能與路線中的模型鉤子一起操作。所以''{#each error in model.errors.street}}'或'{{#each error in errors.street}}'在模板中沒有做任何事情 – 2015-01-15 17:53:44

回答

0

首先,您使用的適配器? DS.Errors在ActiveRecordsAdapter中是默認的。如果您使用RESTAdapter,則必須先執行它。

我想你需要將錯誤設置爲控制器上的屬性。嘗試做:

this.set('errors',errors); 

在保存返回的承諾的錯誤處理程序。

相關問題