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是我创建的一个适配器(不出所料,这可能是问题开始的地方),它有一个基本接口,可以将 , 等映射createRecordupdateRecord一组与 localStorage 一起使用的 get/set 方法(松散地基于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 回答