我仍然是Ember世界的新手,我仍然在努力了解EmberJS和Ember Data(最新版本)。在我以前的(非Ember)节点应用程序中,我包含了一个库,它处理了我存储数据的所有REST调用。它建立了与服务器的连接,并处理了所有错误处理和解析为一个漂亮而整洁的JSON对象,甚至处理了多次调用服务器,以防响应对于一个调用来说太大。我可以获取单个记录,但如果我想获取一堆记录,我所要做的就是初始化库对象('myObj')并调用myObj.fetchAll(config)来启动提取。然后我只需等待几个事件。
实施例
myObj.on('record', function() { // Each record is an event }
myObj.on('error', function () { ...}
myObj.on('end', function () { // After the last record is retrieved }}
我非常想在Ember中使用这个库,但我不知道如何设置它。我无法找到任何创建我自己的适配器的例子(这是正确的术语),这将允许我这样做。
这是我可以用Ember做的,还是不推荐?
答案 0 :(得分:1)
我强烈建议您在尝试非标准之前使用余烬数据,因为您正在学习。几乎所有的文档和帮助都将特别关于余烬数据。这是一个很好的起点:http://guides.emberjs.com/v1.13.0/models/
完全可以使用您自己的模型并使用自定义休息界面。您在路由器上发起myObj.fetchAll(config)
呼叫。如果它正在等待事件,则返回一个承诺并在事件返回时解决它。我对你的图书馆一无所知,但它看起来像是:
export default Ember.Route.extend({
model() {
return Ember.RSVP.Promise(function(resolve){
var records = [];
myObj.on("record", (record) => {
records.pushObject(record);
});
myObj.on("end", () => {
resolve(records);
});
myObj.fetchAll(ENV.config);
});
}
});
在不完美的对比中,这就是你通常在ember中将东西从你的适配器粘到模板上的方法:
配置REST端点:
export default DS.RESTAdapter.extend({
host: 'https://api.example.com'
});
定义模型:
export default Model.extend({
name: attr('string')
});
获取路线中的数据:
export default Ember.Route.extend({
model() {
return this.store.findAll('person');
}
});
渲染数据:
{{#each model as |person|}}
{{person.name}}
{{/each}}
如果你坚持默认的做事方式,这一切都很直接。