我有一个显示某些服务器当前状态的页面。但是,当我尝试更新这些状态时,我必须首先使用虚拟值调用<span ng-if= "user.PhoneNumbers.AreaCode== ''">No Area Code Entered</span>
<span ng-if= "user.PhoneNumbers.PhoneNumber== ''">No Phone Number Entered</span>
<span ng-if="user.PhoneNumbers.AreaCode != ''">({{user.PhoneNumbers[0].AreaCode}}) {{user.PhoneNumbers[0].PhoneNumber | phonenumber}}</span>
或model.save()
,然后使用实际值调用model.set()
,否则该集将失败。
以下是我的模型中的相关功能: 的 myModel.updatingFunction:
model.set()
和 myModel.ajaxCall:
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);
});
});
},
根据我的观点,我希望每当模型发生变化时都会更新。
myView.initialize:
ajaxCall: function(url){
return $.ajax({
type: 'GET',
url: url,
dataType: 'xml'
});
},
myView.render:
initialize: function () {
this.listenTo(this.model,"change", this.render);
this.render();
},
但是当我从render: function() {
this.$el.html(this.template(this.model.toJSON()));
this.delegateEvents();
return this;
},
中删除初始.set
时,视图无法更新。通过在那里做任何事情(据我所知)并没有真正伤害任何事情,所以我可以按原样保留它,但我更喜欢让它按照应有的方式工作(或者至少理解为什么我需要这样做。)
我的fetch函数中创建了updatingFunction
变量,
的 myModel.fetch:
servers
答案 0 :(得分:0)
从您的问题中不清楚您是否知道 set
本身未能更新模型或视图的事实。
但是,我想我可以冒一些猜测发生了什么。
默认情况下,模型更改时 Backbone
不会更新您的视图。因此,当模型通过插件或手动(使用事件或其他方式)更改时,您必须触发一些更新视图的方法。
您的问题意味着第二个set
对视图产生了预期的影响,这让我相信您已经实现了一些更新视图的方法,其中包含您在问题中未提及的模型更改。
所以我推断,如果你这样做并且没有效果:
that.set('servers', servers);
并执行此操作并查看视图更新:
that.set('servers', []);
that.set('servers', servers);
...然后servers
属性已设置为您将其设置为的值。
因此,您只需要重新渲染。
有助于查看有关该视图的更多信息,以及在servers
调用中查看that.set('servers', servers);
的来源。