想知道是否有人可以在这里帮助我。
我在客户端运行backbone.js 有一个页面
服务器正在运行 socket.io。
我已将 Backbones 默认同步替换为主干.iobind 同步以支持 socket.io。
我有一个主干模型,它在保存时从服务器(计划中)获得错误响应,并触发保存的错误功能,但是我在客户端的模型仍然更新为新值。我已经包含了 wait:true ,据我了解,它在更新之前等待服务器的成功响应,但是这不会发生在我身上。
服务器端socket.io代码
io.sockets.on('connection', function (socket) {
socket.on('test:create', function (data, callback) {
//err - used to fake an error for testing purposes
var err = true;
if (err) {
// error
callback('serv error');
} else {
// success
// The callback accepts two parameters: error and model. If no error has occurred, send null for error.
callback(null, data);
}
});
客户端代码
//HTML Code
//<div id="callBtns">
//<button id="runTest">Create</button>
//</div>
var CommunicationType = Backbone.Model.extend({
defaults: {
runTest: 'default'
},
urlRoot : '/test',
validate: function(attrs) {
//return 'error';
}
});
var BasicView = Backbone.View.extend({
el: $('#callBtns'),
initialize: function(){
_.bindAll(this);
},
events: {
"click #runTest": "runTestFn"
},
runTestFn: function() {
//causing the issue?
communicationType.set({runTest: 'value from set'});
communicationType.save({},{
success:function(model, serverResponse){
console.log('Success');
console.log(serverResponse);
},
error:function(model, serverResponse){
console.log('Error');
console.log(serverResponse);
console.log(JSON.stringify(communicationType));
},
wait: true
});
}
});
var communicationType = new CommunicationType();
var basicView = new BasicView();
我注意到这个问题看起来是由于我使用 set 直接更新我的模型(communicationType.set({runTest: 'value from set'});)
如果我在保存之前没有设置任何值,并直接将值传递给保存,就像下面的代码一样,它可以正常工作,例如
communicationType.save({runTest: 'value from save'},{
success:function(....
但是,这意味着如果不通过保存功能,我将无法设置任何新值/更新我的模型:/
所以我的问题是,我怎样才能让它正常工作(如果出现服务器端错误,让客户端模型不更新)同时仍然能够使用 set?
任何答案都非常感谢!非常感谢