Backbone.js 在集合中使用计时器部分更新主干视图并获取模型的子集
当一个计时器在集合上触发时,我试图更新表视图中的一些列,我得到了一个(仅更改)属性的子集。尝试了谷歌的各种代码,但没有成功 希望仅更新视图中的名称和指定之外的年龄属性,而不希望重新渲染整个视图 这是我的密码Backbone.js 在集合中使用计时器部分更新主干视图并获取模型的子集,backbone.js,backbone-views,backbone-events,backbone.js-collections,Backbone.js,Backbone Views,Backbone Events,Backbone.js Collections,当一个计时器在集合上触发时,我试图更新表视图中的一些列,我得到了一个(仅更改)属性的子集。尝试了谷歌的各种代码,但没有成功 希望仅更新视图中的名称和指定之外的年龄属性,而不希望重新渲染整个视图 这是我的密码 <div class='mainBody'> <table class="table"> <tr class="success"> <td>Name</td>
<div class='mainBody'>
<table class="table">
<tr class="success">
<td>Name</td>
<td>Age</td>
<td>Ocupation</td>
</tr>
</table>
</div>
<script id="externalViewTemplate" type="text/template">
<td width='25%'> <%= name %> </td>
<td width='25%' id="age"> <%= age %> </td>
<td width='25%'> <%= occupation %> </td>
</script>
希望仅更新视图中名称和名称以外的age属性,而不打算重新渲染整个视图。根据单元格
属性返回一个。更新单元格的代码应为
update: function() {
this.el.cells.namedItem("age").innerHTML = this.model.get("age");
// or this.el.cells.item(1).innerHTML = this.model.get("age");
// this.el.cells[1].innerHTML = this.model.get("age"); might work
},
因为您很可能有带主干的jQuery,所以只需执行以下操作即可
this.$el.find(".age").text(this.model.get("age"));
请注意,我使用了
className
“age”,因为您不应该在重复的模板中使用id
。您还可以使用index()
,eq()
等使用jQuery而不是className
访问单元格。我只想添加一条免责声明:在大表上,连续进行大量的读写调用将真正降低渲染速度,使渲染更完整。我在personview更新方法中也做了同样的事情。我的亲自提问集合getAge方法将及时运行,我必须使用age属性的新值更新现有集合。如何使用接收到的数据更新现有集合对象。在我获得具有修改年龄的新对象后,我正在执行“this.reset(new object)”。这不起作用。我如何更改集合中的每个模型,以便我的视图已在侦听模型更改并呈现更新的模型?@user3625533您应该像This.model.set(“age”,person.age)那样更新模型
而不是this.model.age=person.age代码>以便侦听器工作。但是请注意,您在同一视图中有this.model
和this.collection
,您的结构有问题。您可以在堆栈片段或fiddle中共享演示吗?@user3625533创建项目视图时,应在集合视图的数组中保留对项目视图的引用。然后,在集合视图的更新中,您应该执行类似于this.itemViews.each(函数(personView){personView.update();})
的操作,假设personView
通过对象引用将更新模型的引用正确地保存为this.modal
,则应该可以工作。
this.$el.find(".age").text(this.model.get("age"));