【发布时间】:2015-08-06 22:04:21
【问题描述】:
我有一个显示某些服务器当前状态的页面。但是,当我尝试更新这些状态时,我必须先使用虚拟值调用 model.save() 或 model.set(),然后再使用实际值调用 model.set(),否则设置将失败。
以下是我的模型中的相关功能: myModel.updatingFunction:
updatingFunction: function(){
that = this;
$.each(myServers, function(index, server){
that.ajaxCall(server["url"]).done(function(resp, status, xhr){
newStatus = $(resp).find("status").text();
server["status"]=status;
that.set("servers",[]); //view does not update if this is removed
that.set("servers",servers);
});
});
},
和myModel.ajaxCall:
ajaxCall: function(url){
return $.ajax({
type: 'GET',
url: url,
dataType: 'xml'
});
},
根据我的观点,我希望它会在模型更改时更新。
myView.initialize:
initialize: function () {
this.listenTo(this.model,"change", this.render);
this.render();
},
myView.render:
render: function() {
this.$el.html(this.template(this.model.toJSON()));
this.delegateEvents();
return this;
},
但是当我从updatingFunction 中删除初始的.set 时,视图无法更新。在那里并没有真正伤害任何东西(据我所知),所以我可以保持原样,但我更愿意让它以它应该的方式工作(或者至少理解我为什么需要这样做)。
servers 变量是在我的 fetch 函数中创建的,
myModel.fetch:
fetch: function(){
switch(this.get("environment")){
case "env1":
servers = [
{
"name":'env1-server1',
"ip":'1.2.3.4',
"heartbeat_indicator":""
},
{
"name":'env2-server2',
"ip":'1.2.3.5',
"heartbeat_indicator":""
}
];
break;
case "env2":
servers = [
{
"name":'env2-server1',
"ip":'2.2.3.4',
"heartbeat_indicator":""
},
{
"name":'env-server2',
"ip":'2.2.3.5',
"heartbeat_indicator":""
}
];
break;
default:
servers= [];
}
this.set("servers", servers);
return servers;
},
【问题讨论】:
标签: jquery ajax backbone.js