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"));