Ember 没有后端的数据使用 API 并将模型转换为 JSON (Ember 2.5.0)
Ember Data usage without a Backend API and converting Models to JSON (Ember 2.5.0)
我正在使用没有外部数据存储的 Ember v2.5.0。
使用 createRecord 方法在路由中创建记录后,无法在应用程序的其他部分(控制器或组件)查询它。
我的理解是需要使用store.push将记录保存到本地,以便控制器访问。但是 store.push 方法要求参数采用 json 格式。
我可以直接取消模型,但我想知道是否有使用 Ember 版本 2.5.0 将模型快速转换为 json 格式的方法?
我还想知道在没有外部后端的情况下使用 Ember 数据时,我关于使用 store.push 在本地保存数据的假设是否是推荐的方法。
关于堆栈溢出的 "Ember models to json" 还有其他参考资料,但是它们已经过时了,我特别想知道我的 approach/assumptions 是否正确,如果不正确,还有哪些替代方法。我对 Ember 很陌生。
问题
//Route
import Ember from 'ember';
export default Ember.Route.extend({
model() {
let shape, square;
square = this.store.createRecord('square');
shape = this.store.createRecord('shape', {
shared: 'shared-value',
square: square
});
return shape;
}
});
//Controller
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
someActionName() {
console.log(this.store.peekRecord('shape', 1)); //undefined!
}
}
});
//Shape Model
import DS from 'ember-data';
export default DS.Model.extend({
shared: DS.attr('string', { defaultValue: '' }),
square: DS.belongsTo('square')
});
//Square Model
import DS from 'ember-data';
export default DS.Model.extend({
sides: DS.attr('string', { defaultValue: '4' }),
whereIbelong: DS.belongsTo('shape')
});
我不认为使用 store.push
是一个好的长期方法,最好使用 save
和 destroyRecord
方法,正如 Ember 数据所期望的那样.
您可以使用本地存储从 base Adapter 创建一个适配器,或者可能只是返回传入 createRecord/updateRecord
的记录。
试用它并找到更适合您的用例的方法,适配器非常灵活。
作为旁注,我发现使 store.push
按预期工作的最佳方法是这样的:
var obj = {
id: '1',
name: "object name",
// More object properties...
};
store.push(store.normalize('model-name', obj));
createRecord
不添加ID。所以 this.store.peekRecord('shape', 1)
是未定义的,因为您创建的记录没有 ID。如果您为您的记录设置一个 ID,一切都会很好。
Ember 旋转:https://ember-twiddle.com/e2b24b5a2cdab19c7b7401c57aff9959?openFiles=controllers.application.js%2C
如果您的目标是在客户端保留记录,请查看 ember-local-storage。
我正在使用没有外部数据存储的 Ember v2.5.0。
使用 createRecord 方法在路由中创建记录后,无法在应用程序的其他部分(控制器或组件)查询它。
我的理解是需要使用store.push将记录保存到本地,以便控制器访问。但是 store.push 方法要求参数采用 json 格式。
我可以直接取消模型,但我想知道是否有使用 Ember 版本 2.5.0 将模型快速转换为 json 格式的方法? 我还想知道在没有外部后端的情况下使用 Ember 数据时,我关于使用 store.push 在本地保存数据的假设是否是推荐的方法。
关于堆栈溢出的 "Ember models to json" 还有其他参考资料,但是它们已经过时了,我特别想知道我的 approach/assumptions 是否正确,如果不正确,还有哪些替代方法。我对 Ember 很陌生。
问题
//Route
import Ember from 'ember';
export default Ember.Route.extend({
model() {
let shape, square;
square = this.store.createRecord('square');
shape = this.store.createRecord('shape', {
shared: 'shared-value',
square: square
});
return shape;
}
});
//Controller
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
someActionName() {
console.log(this.store.peekRecord('shape', 1)); //undefined!
}
}
});
//Shape Model
import DS from 'ember-data';
export default DS.Model.extend({
shared: DS.attr('string', { defaultValue: '' }),
square: DS.belongsTo('square')
});
//Square Model
import DS from 'ember-data';
export default DS.Model.extend({
sides: DS.attr('string', { defaultValue: '4' }),
whereIbelong: DS.belongsTo('shape')
});
我不认为使用 store.push
是一个好的长期方法,最好使用 save
和 destroyRecord
方法,正如 Ember 数据所期望的那样.
您可以使用本地存储从 base Adapter 创建一个适配器,或者可能只是返回传入 createRecord/updateRecord
的记录。
试用它并找到更适合您的用例的方法,适配器非常灵活。
作为旁注,我发现使 store.push
按预期工作的最佳方法是这样的:
var obj = {
id: '1',
name: "object name",
// More object properties...
};
store.push(store.normalize('model-name', obj));
createRecord
不添加ID。所以 this.store.peekRecord('shape', 1)
是未定义的,因为您创建的记录没有 ID。如果您为您的记录设置一个 ID,一切都会很好。
Ember 旋转:https://ember-twiddle.com/e2b24b5a2cdab19c7b7401c57aff9959?openFiles=controllers.application.js%2C
如果您的目标是在客户端保留记录,请查看 ember-local-storage。