SORU
19 EKİM 2012, Cuma


Nasıl hatalar ember.js Veri RESTAdapter kullanırken ele alınmalıdır?

ember-data.js: https://github.com/emberjs/data/tree/0396411e39df96c8506de3182c81414c1d0eb981

Kısacası, ne zaman bir hata var, istiyorum ekran hata iletileri görüntülemek ve kullanıcı 1) iptal edecek geri alma işlem 2) doğru giriş hataları ve başarıyla tamamlama hareket, geçen doğrulaması sunucu.

Aşağıda kaynak kod parçacığı. Bir hata geri içermez.

updateRecord: function(store, type, record) {
  var id = get(record, 'id');
  var root = this.rootForType(type);

  var data = {};
  data[root] = this.toJSON(record);

  this.ajax(this.buildURL(root, id), "PUT", {
    data: data,
    context: this,
    success: function(json) {
      this.didUpdateRecord(store, type, record, json);
    }
  });
},

Genel olarak, sunucu bir hata alma ve görünümü güncelleme akışı nedir? Bir hata geri arama isError bir devlet modeli koymak gerekir gibi görünüyor, ve sonra Görünüm uygun mesajları görüntüleyebilirsiniz. Ayrıca, bu işlem kirli kalmalı. Bu şekilde hareket rollback kullanabilirsiniz.

store.recordWasInvalid kullanarak doğru yönde, ama olacak gibi görünüyor.

CEVAP
12 Aralık 2012, ÇARŞAMBA


Bu hafta sonu aynı şeyi anlamaya çalışıyordum. Luke dediğini gidiyor, latest commit için kor-veri kaynağı (Aralık 11) daha yakından bir göz attım.

TLDR; ele ember-veri güncelleme/hatalar, sadece becameError() DS.Model örnek becameInvalid(errors) tanımlamak oluşturun. Bu cascade RESTadapter. AJAX hata geri arama tetiklediği sonunda bu işlevleri tanımlamak arayacak.

Örnek:

App.Post = DS.Model.extend
  title: DS.attr "string"
  body: DS.attr "string"

  becameError: ->
    # handle error case here
    alert 'there was an error!'

  becameInvalid: (errors) ->
    # record was invalid
    alert "Record was invalid because: #{errors}"

İşte bu kaynak üzerinden tam yürüyüş:

DİNLENME adaptör, AJAX geri arama hata fonksiyonu here verilmektedir

   this.ajax(this.buildURL(root, id), "PUT", {
      data: data,
      context: this,
      success: function(json) {
        Ember.run(this, function(){
          this.didUpdateRecord(store, type, record, json);
        });
      },
      error: function(xhr) {
        this.didError(store, type, record, xhr);
      }
    });

didError here tanımlanmış ve teslim cevaba göre: mağazanın recordWasİnvalid veya recordWasError çağırır

  didError: function(store, type, record, xhr) {
    if (xhr.status === 422) {
      var data = JSON.parse(xhr.responseText);
      store.recordWasInvalid(record, data['errors']);
    } else {
      store.recordWasError(record);
    }
  },

Sırayla, store.recordWasInvalid store.recordWasError (here tanımlı) Arama Kaydı (DS.Model)'in işleyicileri. Geçersiz durumda, birlikte bir değişken olarak adaptöründen hata iletileri geçirir.

 recordWasInvalid: function(record, errors) {
    record.adapterDidInvalidate(errors);
  },

  recordWasError: function(record) {
    record.adapterDidError();
  },

Son olarak 33**: işleyicileri için bizleri DS.Model.adapterDidInvalidate adapterDidError (here tanımlı) sadece send('becameInvalid', errors) send('becameError')

  didLoad: Ember.K,
  didUpdate: Ember.K,
  didCreate: Ember.K,
  didDelete: Ember.K,
  becameInvalid: Ember.K,
  becameError: Ember.K,

(Ember.K this döndürmek için sadece boş bir fonksiyonudur. ** 34)

Yani, sonuç olarak, sadece model üzerinde becameInvalid becameError Bu durumlarda işlemek için işlevleri tanımlamak gerekir.

Bu başkası yardımcı olur; doktorlar kesinlikle bunu hemen yansıtmak olmaz umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • funbro1

    funbro1

    11 Aralık 2007
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013