以下是我的观点和模型。显然,每次我为serverRequestData
的每次调用准备一份新的initiateTest
数据并将其传递给save
方法。
因此,我的服务器调用应该与serverRequestData
中存在的数据一起发生。它在第一次调用initiateTest
时正确发生,但从第二次开始,我看到先前服务器调用的响应已通过。
这看起来很奇怪,因为很明显我每次都在准备新的initiateTest
。
我做错了什么,这搞砸了backbone.js的一些内部事情?
查看:
define(['jquery', 'underscore', 'backbone', 'models/adhocmodel', 'models/resultmodel',
'text!templates/adhoc/adhocTemplate.html'], function($, _, Backbone,
adhocModel, resultModel, adhocTemplate) {
var adhocHistoryView = Backbone.View.extend({
resultmod : new resultModel(),
model : new adhocModel(),
el : $("#container"),
events : {
"click #test" : "initiateTest"
},
initiateTest : function() {
var serverRequestData = {"myid":"AAA",
"fname":"Wade",
"lname": "Wade",
"telephoneNumber":telNum,
"testMode":"Initial" };
console.log(serverRequestData);
var that = this;
this.model.save(serverRequestData, {
url: "forms/serviceDiagnostic/startTest",
type: "POST",
contentType: "application/json",
success : function(model, response) {
that.model.adhocCommon.hasTestResultArrived = true;
that.model.testResults = response;
that.render();
$('#container').trigger("create");
},
error : function(model, response) {
console.log("####### Error recieved ....");
}
});
},
initialize : function() {
},
render : function() {
console.log(this.model);
//this.$el.html(adhocTemplate);
var data = {
model:this.model,
_:_
};
var compiledTemplate = _.template(adhocTemplate, data );
this.$el.html(null);
this.$el.html(compiledTemplate);
return this;
}
});
return adhocHistoryView;
});
型号:
define([ 'backbone' ], function(Backbone) {
var adhocModel = Backbone.Model.extend({
initialize : function() {
},
poolHandler : null,
poolCounter : 0,
adhocCommon : {
hasTestResultArrived : false
},
testResults : {}
});
return adhocModel;
});
答案 0 :(得分:2)
这就是Model.save()
的工作原理。 Backbone希望您的服务器能够响应服务器中模型的最新状态,并且您的模型将使用该响应进行更新。
此外:
属性hash(如set中所示)应该包含您想要更改的属性 - 未提及的键不会被更改 - 但是,资源的完整表示将被发送到服务器强> (强调我的)
因此,在您第一次通话后,模型将随服务器响应一起更新,并且从下一次开始,它将与您传递给((+) 1) 2
的属性一起发送。
如果要更改发送到服务器的内容,可以覆盖save()
方法,如果要在收到响应时更改更新为模型的内容,可以定义{{3}方法。