2013-07-16 3 views
3

Я использую данные ember-data 0.13 с рельсами. У меня есть контроллер basicinfo для обработки обновления модели basicinfo. Действие обновления:ошибка сервера данных ember-data

update: -> 
    @content.save() 
    @content.on('becameInvalid', (response) -> 
     alert Em.inspect(response.errors) 
    ) 

basicinfo.hbs:

<aside class='basicinfo-aside'> 
    {{#if inEditModel}} 
<div class='control-group'> 
    <label for='basicinfo_about_me'>{{t '.basicinfo.edit.about_me'}}</label> 

    <div class='controls'> 
    {{view Em.TextArea id='basicinfo_about_me' 
         class='basicinfo-about-me' 
         name='basicinfo[about_me]' 
         valueBinding='aboutMe'}} 
    </div> 
</div> 

<div class='action-group'> 
    <span {{bindAttr class=':about-me-length-remain 
          hasAboutMeLengthRemain:muted:text-error'}}> 
    {{aboutMeLengthRemain}} 
    </span> 

    <button class='btn-cancel btn' {{action cancel}}> 
    {{t '.basicinfo.edit.cancel'}} 
    </button> 

    <button class='btn-update btn btn-primary' {{action update}}> 
    {{t '.basicinfo.edit.update'}} 
    </button> 
</div> 

    {{/if}} 
</aside> 

<div class='basicinfo-inner'> 
    {{#unless inEditModel}} 
    <h5> 
     {{t '.basicinfo.about_me'}} 

     {{#if canManage}} 
     <a class='lnk-edit' href='#' {{action edit}}> 
      <i class='icon-edit'></i> 
     </a> 
     {{/if}} 
    </h5> 

    <p class='about-me'>{{aboutMe}}</p> 
    {{/unless}} 
</div> 

, когда я нажимаю кнопку обновления с недостоверными данными в первый раз ошибка правильно показывает, но если я не исправить ошибку и нажмите кнопку обновления снова Эмбер показывает : «Непринятая ошибка: попытка обработать событие willCommit при включенном состоянии rootState.loaded.updated.invalid. Вызывается с неопределенным« Как его решить Спасибо!

ответ

0

Данные об утечке, по-видимому, немного ошибочны при обработке ошибок.

Я хотел бы предложить вам бы следующее:

update: -> 
    @content.rollback() if @content.get('isError') 
    @content.save().then ((success_responce)-> 
    <handle success responce here> 
), (failure)-> 
    <handle failure here> 

Еще лучшее решение, на мой взгляд было бы отключить кнопку обновления, на основе record.isError флага.

Еще одна вещь, которую следует учитывать, - это то, что нужно делать, когда сервер возвращает ошибки, и вы хотите перейти на другой маршрут (например, кнопкой отмены). Данные Ember запретят вам, жалуясь, что запись имеет inFlightAtrributes. В этом случае вы можете снова позвонить record.rollback(), чтобы вернуть флаги в исходное состояние и продолжить переход.

Смежные вопросы