0

我成功使用了 Ember Data DS.RESTAdapter。该适配器有一个名为findMany.

hasMany每当访问某个模型实例的关系时,都会在幕后使用该方法:获取关系中已经存在的一组裸 ID,以在一个批量 AJAX 请求findMany中查询远程服务器以获取所有这些 ID 的完整数据-回应

在我的 Ember 应用程序中,我现在需要手动查询一组 ID 。应用程序从任何 Ember Data 模型实例关系之外的其他地方获取这些 ID。

如果它有助于可视化这个需求,想象一个用户输入一个逗号分隔的 ID 列表,让 Ember Data 通过查询远程服务器来查找这些 ID,然后 Ember Data 将返回的数据添加到某个模型实例的关系中。

因此:如何批量查询一组 ID,最好利用DS.RESTAdapter.findMany,然后将返回的 Ember Data 实例添加到某些模型实例的关系中?

TL;DR:我正在寻找类似的东西App.MyModelType.**findMany**(234, 583, 234),但我不想循环,App.MyModelType.find因为这对于大量 ID 来说效率不高。

4

1 回答 1

0

对于 2013-06-25 之前的 Ember Data 版本,app.js在定义任何 Ember Data 模型类之前添加以下代码:

DS.Model.reopenClass({
    findMany: function(ids) {
        //taken from model.js's storeAlias(..)

        var store = Ember.get(DS, 'defaultStore'),
            args = [].slice.call(arguments);

        args.unshift(this);
        Ember.assert("Your application does not have a 'Store' property defined. Attempts to call 'findMany' on model classes will fail. Please provide one as with 'YourAppName.Store = DS.Store.extend()'", !!store);

        return store["findMany"].apply(store, args);
    }
});

//begin definition of App.MyModelType = DS.Model.extend({..}); here

store.findMany(..)将确定哪些 ID 在商店中还没有加载的记录。对于这些卸载的记录,store.findMany(..)会调用store.fetchMany(..).
store.fetchMany(..)将用于adapter.findMany(..)将查找逻辑委托给使用的DS.Adapter实现。

通过findManyDS.Model超类型的上述附加,您现在可以使用App.MyModelType.findMany(..)并返回一个模型实例数组,例如

var someArrayWithIds = [1, 2, 3];
someModelInstances = App.MyModelType.findMany(someArrayWithIds);
于 2013-06-25T18:22:30.640 回答