1

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

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

假设我们有一个具有默认属性的骨干模型定义。属性text可以从服务器以 JSON 格式接收[{ "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 中的回归还是我以错误的方式使用这个模型?

4

1 回答 1

1

Backbone.js 1.0 中有一个回归,它在当前 master 中已修复。

已关闭的问题

于 2013-07-12T02:27:56.163 回答