首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ampersand.js模型或集合上的分析属性的位置

Ampersand.js模型或集合上的分析属性的位置
EN

Stack Overflow用户
提问于 2015-07-09 04:06:57
回答 1查看 283关注 0票数 2

在我当前的项目中,我使用了ampersand.js模型和rest集合。当我将它连接到api时,我遇到了麻烦。api返回的对象如下所示...

代码语言:javascript
复制
{ 
    type: ...,
    multi: ...,
    data: <good stuff>
}

为了将数据加载到模型或集合中,我的理解是我需要使用parse。

在看完文档之后,似乎我应该在模型中放置parse。

但在实践中,当我对集合运行fetch时,它不会将数据加载到模型中,除非集合上有parse属性。但是,当我运行getOrFetch时,它不会加载数据,除非模型上有解析属性。

如果我在模型和集合中都放入parse,那么什么都不会起作用。

我必须移动它,这真的没有道理。我需要知道它应该住在哪里,以及我需要做些什么才能让它工作。

以下是我的模型和收藏:

代码语言:javascript
复制
var Case = Model.extend({
    ajaxConfig: function () {
        return {
            headers: {
                'x-auth-token': 'testing'
            }
        };
    },
    parse: function (response) {
        return response.data;
    },
    props: {
        id: 'string',
        orgId: 'string',
        created: 'string',
        lastUpdated: 'string',

    }
});

var CaseCollection = RestCollection.extend({
    model: Case,
    url: '/cases',
    ajaxConfig: function () {
        return {
            headers: {
                'x-auth-token': 'testing'
            }
        };
    },
    parse: function (response) {
        return response.data;
    },
    getCase: function (caseId, callbackfunc) {
        this.getOrFetch(caseId, function (err, model) {
            if (err) {
                console.log(err);
            } else {
                callbackfunc(model.toJSON());
            }
        });
    },
    getCases: function (callbackfunc) {
        this.fetch({
            success: function (collection, response) {
                callbackfunc(collection.toJSON());
            }
        });
    }
});
EN

回答 1

Stack Overflow用户

发布于 2015-07-11 21:32:04

这取决于资源的数据结构;

如果期望的数据是一个对象数组,即客户端请求一个列表,那么您应该覆盖集合的parse。如果资源使用对象进行响应,即客户端请求单个,则应覆盖模型的parse

根据您的情况-资源返回一个对象列表,因此覆盖集合的parse以遍历响应数据并返回相关值。

假设响应数组中的对象与模型的结构相匹配,就不应该覆盖模型的parse,以免干扰模型的构造。

Ampersand的getOrFetch不应该受此影响,因为它只缓存现有数据,或者从预期的资源中获取模型。

问题可能出在服务器的(REST) API中。Backbone从集合的url中派生模型的资源,方法是将模型的id作为另一个段附加到URL,因此除非您的后端不提供/cases/{id}中的任何内容,否则在绑定到集合的模型上的任何获取都将失败。

要解决这个问题,要么通过覆盖rootUrl来更改模型的URL,要么在后台创建这样的资源。

来自model.url上的主干文档

返回模型资源在服务器上的相对地址。如果您的模型位于其他位置,请使用正确的逻辑覆盖此方法。默认情况下会生成以下形式的urlRoot:“集合.url/id”,但如果不应考虑模型的集合,则可以通过指定显式URL来覆盖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31302655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档