如何使用Ember适配器发出多个请求?

时间:2016-01-17 00:36:01

标签: javascript ember.js parse-platform schema

我正在构建一个以Parse作为后端的Ember应用。开箱即用的解决方案与关系有些奇怪 - 它们只能以一种方式工作。 / /我一直试图通过在Ember中保存两个模型来手动使关系工作两种方式,但这看起来很混乱,并且可能意味着数据很容易失去同步。呸。所以现在我正在寻找替代品。

首先,让我更详细地解释一下。

假设我有postcomments。 Parse将存储来自comments - >的关系。 post,但不是相反。或者,我可以在“指针数组”中管理comments的列表,但不能管理comments - >中的一对一关系。 post

我看到两个选项:

  1. 使用Cloud Code平台修改API的工作方式。这可能是更容易的路线,但我宁愿在Ember中解决这个问题,所以我可以为遇到此问题的其他人开源我的适配器/序列化器。
  2. 找出在我的适配器中发出多个请求的方法。我想它会起到这样的作用:

    一个。在应用代码中调用this.store.findRecord('post', id)

    湾Ember适配器根据模型中定义的内容看到post具有hasMany关系。

    ℃。适配器生成一个url,用于查找post的id与我想要找到的id匹配的注释(很容易用Parse做)。是的,这意味着多个请求,但只有1个(每个关系)。它与Ember在Payload中有links属性时所做的类似,但我们没有,因为Parse无法识别hasMany关系。

  3. 寻找2件事。首先,任何关于我是否正确思考这个问题的想法,或者对其他选项的建议。其次,也许是最重要的一些想法,我可以在我的适配器中锁定什么钩子来触发第二个请求。我最初的想法是这样的:

    findRecord: function(store, type, id, snapshot) {
      snapshot.eachRelationship(relationship => {
        // Do something to build a url for each hasMany relationship
      });
    
      return Ember.RSVP.promise(...);
    }
    

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

所以,基本上你试图覆盖ember-data的默认findRecord行为。

您当前的方法听起来是正确的。您可以创建适配器并为findRecord,findAll,query等方法提供自定义定义。

典型的代码示例可以是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value.floatValue > 2000"];

代码段完全含糊不清,但我希望你明白我的观点..