我有一个将用户的搜索条件保存在 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
是我创建的一个适配器(不出所料,这可能是问题开始的地方),它有一个基本接口,可以将 , 等映射createRecord
到updateRecord
一组与 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 框架,因此欢迎对代码样式、结构和任何其他内容提出任何其他意见。