gpt4 book ai didi

javascript - 专门化(区分)Backbone.Model 解析方法的行为的干净方法

转载 作者:行者123 更新时间:2023-12-02 17:55:26 27 4
gpt4 key购买 nike

我有一个名为 BaseModel 的简单模型,它是从 Backbone.Model 扩展而来的。根据Backbone.js文档 我已经重写了 parse 方法来使用预先存在的 API。

parse 方法在两种不同的情况下被调用。当我想从集合中获取所有数据时。当我想从模型中获取特定数据时。

BaseModel 中,为了区分我正在执行以下操作的行为。

parse : function(response, options) {
var result;

if(options.collection) {
// I'm coming from the fetch that belongs to the collection

// manipulate result here...
} else {
// I'm coming from the fetch that belongs to the model

// manipulate result here...
}
return result;
}

这种方法有效吗?或者有更好的方法来实现这一目标吗?

编辑 1

我想到了安德鲁的回答,但我需要处理的情况很奇怪。事实上,当第一次(从集合中)调用 parse 方法时,将解析数据并创建模型的属性。然后,当从模型本身调用 parse 方法时,会解析其他数据,并将模型的属性合并到第一个数据中。

编辑2

例如,在我的情况下,来自集合的响应包含一个对象数组,其中每个对象都有一个属性a。可以应用转换,例如日期对象。然后,来自模型的响应包含 b。这里也可以应用转换。最后,这两个属性将合并到同一模型中,但它们来自不同的 fetch 调用。

请注意,集合中的响应已经是一个数组。所以,我不会在这里区分或 split 任何东西。我只知道如果我来自集合,我会找到 a,否则 b

读取集合中的fetch给我所有模型,而另一个调用为基于从集合返回的模型,通过细节丰富它

最佳答案

Backbone.Collection 还有一个 parse 方法。在我看来,正确的方法是为您的 BaseModelCollection 实现它。

集合解析方法只需将数据转换为未解析模型的数组。然后它自动委托(delegate)给 BaseModel 解析方法来单独解析每个模型。

例如,

BaseModel {
parse : function(response, options) {
var result;
// I'm coming from the fetch that belongs to the model

// manipulate result here...

return result;
}
}

BaseCollection {
parse : function(response, options){
// I'm coming from the fetch that belongs to the collection
// Turn it into an array.
return response.split('mydelim');
}
}

从您的编辑2来看,您的方法似乎是正确的想法。不过,我想说,如果我在哪里执行此操作,我将测试返回对象的属性而不是调用的上下文,因此我不需要关心数据源,

parse : function(response, options) {
var result = {};

if(response.a){
result.c = response.a;
} else if(response.b){
result.c = response.b;
}

...

return result;
}

关于javascript - 专门化(区分)Backbone.Model 解析方法的行为的干净方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com