Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干:渲染树数据并根据更改进行更新_Javascript_Backbone.js_Marionette_Backbone Views_Backbone Events - Fatal编程技术网

Javascript 主干:渲染树数据并根据更改进行更新

Javascript 主干:渲染树数据并根据更改进行更新,javascript,backbone.js,marionette,backbone-views,backbone-events,Javascript,Backbone.js,Marionette,Backbone Views,Backbone Events,我从服务器获取某种类型的树数据(仅作为示例): 要呈现此效果,我将使用Backbone.marionete.CollectionView&Backbone.marionete.CompositeView (以下) 但我需要每300秒轮询一次服务器,它可以返回更改的树: [ { nodeName: "top level 1", nodes: [ { nodeName: "2nd level, item 1", nodes: [

我从服务器获取某种类型的树数据(仅作为示例):

要呈现此效果,我将使用Backbone.marionete.CollectionView&Backbone.marionete.CompositeView (以下)

但我需要每300秒轮询一次服务器,它可以返回更改的树:

[
    {
    nodeName: "top level 1",
    nodes: [
        {
        nodeName: "2nd level, item 1",
        nodes: [
            {
            nodeName: "3rd level, item 1"},
            {
            nodeName: "new name"} // changed
        ]}
    ]},
{
    nodeName: "top level 2",
    nodes: [
        {
        nodeName: "2nd level, item 3",
        nodes: [
            {
            nodeName: "3rd level, item 7"},
        {
            nodeName: "3rd level, item 8"},
        {
            nodeName: "3rd level, item 9"},
        {
            nodeName: "3rd level, item 10"} // added
        ]}
    ]}
]​
现在我只需调用tree.update(data)来重新提交整个数据

如何仅更新依赖于已更改属性的视图


我正在努力减少重新招标的视图。我应该使用CompositeViews还是尝试类似主干关系模型的方法来完成此任务?

由于每次初始化时都要重建集合,因此每次调用
update
时都要从零开始重新创建节点树

为了保存节点树,您必须同步从主干中的服务器获取的树。最简单的方法是创建与nodeName一起传递的唯一ID,并以此为基础构建模型和集合。然后你可以重写这个:

if (nodes) {
  this.nodes = new TreeNodeCollection(nodes);
  this.unset("nodes");
}

执行查找以查看节点是否存在,并附加到相关集合中,而不是将其清除并重新创建。

由于每次初始化时都要重建集合,因此每次调用
update
时都要从零开始清除并重新创建节点树

为了保存节点树,您必须同步从主干中的服务器获取的树。最简单的方法是创建与nodeName一起传递的唯一ID,并以此为基础构建模型和集合。然后你可以重写这个:

if (nodes) {
  this.nodes = new TreeNodeCollection(nodes);
  this.unset("nodes");
}

执行查找以查看节点是否存在,并附加到相关集合中,而不是将其删除并重新创建。

请随意接受答案或要求澄清。请随意接受答案或要求澄清。