我有一个应用程序在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
等映射到一堆get /设置与localStorage一起使用的方法(松散地基于a github fork of ember-data)。适配器似乎适用于某些基本测试,特别是当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框架,因此欢迎任何关于代码风格,结构和任何其他内容的评论。
答案 0 :(得分:0)
Ember Data不会更改控制器上的createRecord
,因此它的行为应该不同。过去可能存在与此相关的事情,但事实并非如此。