从服务器的提取响应中排除时删除属性Backbone Model

时间:2013-04-01 20:01:47

标签: javascript backbone.js underscore.js

我意识到它有点不标准,但我正在寻找一种方法,以便我可以使用Backbone的fetch方法来删除模型上未包含在服务器的json响应中的属性。基本上是排除属性的自动取消设置。

现在,我可以擦除所有内容并重新设置模型,但我想以不会触发其余属性的更改事件的方式执行此操作。

我也不想循环遍历响应对象并调用unset。 Backbone有一个明显的功能,我错过了吗?

我为这个场景构建了一个小提琴。尝试通过所有测试,只修改model.fetch()行。

http://jsfiddle.net/gtSwC/

var mockResponse = '{ "id": 1 }';
this.server.respondWith("GET", "/test", [ 
    200, 
    { "Content-Type": "application/json" },
    mockResponse
]);

var model = new MyModel({ foo: 'remove me', keep: true });
model.on('change:keep', function () {
    ok(false, 'Failure!  Do not trigger change on this if at all possible.');
});

// Act
model.fetch(); // Need a flag here?
this.server.respond();

// Assert
equal(model.get('foo'), undefined, 'I want this removed via fetch');

1 个答案:

答案 0 :(得分:0)

我刚刚看了一下,似乎没有Model #fetch的“重置”标志。虽然,你可以用沉默的旗帜取消。从0.9.10开始,Backbone的行为应该让你满意:

在更改时传递{silent:true}将不再延迟个别”change:attr“事件,而是完全沉默。