如何使用库来获取Ember

时间:2015-08-09 01:36:22

标签: ember.js ember-data

我仍然是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做的,还是不推荐?

1 个答案:

答案 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}}

如果你坚持默认的做事方式,这一切都很直接。