0

ユーザーの検索条件を localStorage に保存するアプリケーションがあります。保存された各検索は、Ember.js モデルのインスタンスとして表されます。

Checklist.SavedSearch = DS.Model.extend({
  id: DS.attr('string'),
  filters: DS.attr('string')
});

「保存」ボタンが押されると、コントローラーはインスタンス化されたモデルを作成し、そのレコードを作成します。

Checklist.savedSearchController = Ember.ArrayController.create({
  [..]

  save: function(view) {
    var saved_seach = Checklist.SavedSearch.createRecord({
      id: 'abcd',
      filters: '<json>'
    });
    Checklist.local_store.commit();
  }
});

Checklist.local_storeは、私が作成したアダプターです (これはおそらく問題が始まる場所です) 、 などを localStorage で動作する一連の get/set メソッドにマップする基本的なインターフェイスを備えていcreateRecordますupdateRecord(大まかにember-data の github フォークに基づいています) 。 . findAllアダプターは、特に問題がなく、localStorage に手動で追加された値を返すため、一部の基本的なテストでは正常に動作するようです。

内の関連するメソッドは次のChecklist.local_storeとおりです。

createRecord: function(store, type, model) {
  model.set('id', this.storage.generateId);

  var item = model.toJSON({associations: true});

  this.storage.setById(this.storage_method, type, id, item);
  store.didCreateRecord(model, item);
}

問題はcreateRecord、コントローラーによって呼び出されたときに、まったく何も起こらないことです。デバッガーを介して実行し、コンソールにログを記録すると、メソッドがまったく呼び出されていないことが示されているようです。これは、Ember.js がどのように機能するかについての私の誤解だと思います。なぜこれが起こっているのか、助けていただければ幸いです。

私は ruby​​ と php のバックグラウンドを持っており、おそらくばかげて JS フレームワークに直接飛び込んでしまったので、コード スタイル、構造、および一般的なものに関するその他のコメントは大歓迎です。

4

1 に答える 1

0

Ember Data はcreateRecordコントローラー上で変更されないため、動作が異なることはありません。過去にこれに関連する何かがあった可能性がありますが、今はそうではありません。

于 2013-07-29T22:20:30.610 に答える