2

私はしばらくグーグルをしていますが、良い解決策は見つかりませんでした。

isDirty問題の根本は、このメソッドを使用しているときにレコードが設定されていないことです。

DS.JSONTransforms.object = {
  deserialize: function(serialized) {
    return Ember.isNone(serialized) ? {} : serialized;
  },
  serialize: function(deserialized) {
    return Ember.isNone(deserialized) ? {} : deserialized;
  }
}

私が収集したものから、これは、私が投げているJSONオブジェクトを処理するため、明らかにまだ機能している古いメソッドですが、isDirty編集時にレコードを設定していません。

現在使用しているのはregisterTransformアダプターです(このhttps://github.com/emberjs/data/issues/517による)。しかし、私のカスタムトランスフォームは登録されていないので、間違った場所(以前のJSONTransformsと同じ場所)に配置していると思います。

DS.RESTAdapter.registerTransform('object', {
  deserialize: function(serialized) {
    return Em.none(serialized) ? {} : serialized;
  },
  serialize: function(deserialized) {
    return Em.none(deserialized) ? {} : deserialized;
  }
});

誰かがこれについて共有する知識を持っていますか?

4

2 に答える 2

3

の問題isDirtyは、を使用していないためではなくregisterTransform、動作は同じになります。

現在のところ、Ember Dataはオブジェクト属性をサポートしていません。実際、isDirtyフラグを設定するための変更を監視することは困難の1つです。

これには、githubで追跡できる未解決の問題があります。

回避策は、ネストされたオブジェクトを適切なものとして宣言し、DS.Modelそれらの間に埋め込み関係を設定することです。

たとえば、投稿とともに送信された日付オブジェクトがあるとします。

{post: {
  id: 12
  title: "EmberData accept object attributes, you do not need this anymore !!"
  date: {
    day: "01"
    month: "03"
    year: "2013"
  }
}}

モデルを次のように宣言します。

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  date: DS.belongsTo('App.PostDate')
});

App.PostDate = DS.Model.extend({
  post: DS.belongsTo('App.Post'),
  day: DS.attr('string'),
  month: DS.attr('string'),
  year: DS.attr('string'),
});

そして、アダプタにマッピングを追加します。

DS.RESTAdapter.map('App.Post',{
  date:{
    embedded:'always'
  }
})

埋め込みマッピングオプションの詳細については、この回答を参照してください。

于 2013-02-04T22:49:18.157 に答える
0

同意しません。私はあなたのすべての子供の関係/記録のために余分な呼び出しをしなければならないことは非効率的で過度に複雑だと思います。このための回避策を見つけました。'last_updated'のフィールドを追加し、ネストされたものの値を変更した後、last_updatedを現在の時刻に更新するだけで、'isDirty'フラグがトリガーされ、更新できるようになります...

于 2013-06-14T04:21:31.883 に答える