Backbonejs collection.fetch()强制使用默认模型参数

时间:2013-07-10 20:42:24

标签: backbone.js backbone-collections backbone-model

将Backbonejs升级到1.0后,从服务器获取集合会强制执行未响应的默认属性。

更具体地说,我创建了此测试,可以在jsfiddle中验证。

假设我们有一个带有默认属性的主干模型定义。可以使用JSON text从服务器接收属性[{ "text": "updated", "id" : 1}],并在客户端维护属性selected

var Model = Backbone.Model.extend({
    defaults: function () {
        return {
            text: 'default',
            selected: false
        };
    }    
});

如果我们使用此设置并从服务器获取数据,它将正常工作。现在假设我们在骨干集合中添加此模型,如下所示:

var Models = Backbone.Collection.extend({
    url: '/json/',
    model: Model
});

创建一个新的集合实例并填充fetch

var models = new Models();
models.fetch({
    update : true
});

之后,我们在集合中选择一个模型,并将selected属性更改为true:

var model = models.get(1);
model.set('selected', true);

现在,如果我们第二次调用fetch集合,即使响应中没有这样的值,主干网也会将之前更改的属性清除为默认值false

models.fetch({
    update : true
});
model = models.get(1);

获取selected值将返回false,而不是之前设置的true

model.get('selected');

解决方法:注释掉那些未从服务器收到的属性。

但是在那种情况下,我们从骨干中丢失了许多有用的功能。 这是Backbonejs 1.0的回归还是我以错误的方式使用这个模型?

1 个答案:

答案 0 :(得分:1)

Backbone.js 1.0中存在一个回归,在当前主数据库中已修复。

Closed issue