1

我意识到这有点不标准,但我正在寻找一种方法,以便我可以使用 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');
4

1 回答 1

0

我刚刚看了看,似乎 Model#fetch 没有“重置”标志。不过,您可以使用静默标志取消设置。我猜 Backbone 自 0.9.10 以来的行为应该让你满意:

"在更改上传递 {silent:true} 将不再延迟单个 "change:attr" 事件,而是完全静音。 "

于 2013-04-01T22:00:46.840 回答