zoukankan      html  css  js  c++  java
  • D3.js 理解 Update、Enter、Exit

    Update、Enter、Exit 是 D3 中三个非常重要的概念,它处理的是当选择集和数据的数量关系不确定的情况。

    73

    一、什么是 Update、Enter、Exit

    svg.selectAll("rect")   //选择svg内所有的矩形
        .data(dataset)      //绑定数组
        .enter()            //指定选择集的enter部分
        .append("rect")     //添加足够数量的矩形元素

      这段代码使用的情况是当以下情况出现的时候:有数据,而没有足够图形元素的时候,使用此方法可以添加足够的元素。

      假设,在 body 中有三个 p 元素,有一数组 [3, 6, 9],则可以将数组中的每一项分别与一个 p 元素绑定在一起。

      但是,有一个问题:当数组的长度与元素数量不一致(数组长度 > 元素数量 or 数组长度 < 元素数量)时呢?这时候就需要理解 Update、Enter、Exit 的概念。

      如果数组为 [3, 6, 9, 12, 15],将此数组绑定到三个 p 元素的选择集上。可以想象,会有两个数据没有元素与之对应,这时候 D3 会建立两个空的元素与数据对应,这一部分就称为Enter

      而有元素与数据对应的部分称为 Update

      如果数组为 [3],则会有两个元素没有数据绑定,那么没有数据绑定的部分被称为 Exit。示意图如下所示。

      4-4-8

    二、Update 和 Enter 的使用

      当对应的元素不足时 ( 绑定数据数量 > 对应元素 ),需要添加元素(append)。

      现在 body 中有三个 p 元素,要绑定一个长度大于 3 的数组到 p 的选择集上,然后分别处理 update 和 enter 两部分。

    var dataset = [ 3 , 6 , 9 , 12 , 15 ];
    
    //选择body中的p元素
    var p = d3.select("body").selectAll("p");
    
    //获取update部分
    var update = p.data(dataset);
    
    //获取enter部分
    var enter = update.enter();
    
    //update部分的处理:更新属性值
    update.text(function(d){
        return "update " + d;
    });
    
    //enter部分的处理:添加元素后赋予属性值
    enter.append("p")
        .text(function(d){
            return "enter " + d;
        });

      结果如下图,update 部分和 enter 部分被绑定的数据很清晰地表示了出来。

      71 

      请大家记住:

      • update 部分的处理办法一般是:更新属性值
      • enter 部分的处理办法一般是:添加元素后,赋予属性值

    三、Update 和 Exit 的使用

      当对应的元素过多时 ( 绑定数据数量 < 对应元素 ),需要删掉多余的元素。

      现在 body 中有三个 p 元素,要绑定一个长度小于 3 的数组到 p 的选择集上,然后分别处理 update 和 exit 两部分。

    var dataset = [ 3 ];
    
    //选择body中的p元素
    var p = d3.select("body").selectAll("p");
    
    //获取update部分
    var update = p.data(dataset);
    
    //获取exit部分
    var exit = update.exit();
    
    //update部分的处理:更新属性值
    update.text(function(d){
        return "update " + d;
    });
    
    //exit部分的处理:修改p元素的属性
    exit.text(function(d){
            return "exit";
        });
    
    //exit部分的处理通常是删除元素
    // exit.remove();

      结果如下,请大家区分好 update 部分和 exit 部分。这里为了表明哪一部分是 exit,并没有删除掉多余的元素,但实际上 exit 部分的绝大部分操作是删除。

      72

      请大家记住:

      • exit 部分的处理办法一般是:删除元素(remove)
  • 相关阅读:
    (转)LayoutInflater的使用
    SQLite入门
    字符排序 分类: java 20100103 14:28 791人阅读 评论(1) 收藏
    oracle常用日期函数 20091211 22:13 300人阅读 评论(0) 收藏
    several years later 分类: 人生墨客 20100106 12:29 470人阅读 评论(0) 收藏
    值传递与引用传递 分类: java 20091218 21:41 343人阅读 评论(0) 收藏
    第一章 基本知识 分类: java 20091229 16:49 307人阅读 评论(0) 收藏
    第三章 运算符、表达式与语句 分类: java 20091229 16:46 304人阅读 评论(0) 收藏
    第五章 继承、接口与泛型 分类: java 20091229 16:43 348人阅读 评论(0) 收藏
    第二章 基本数据类型,输入、输出,数组 分类: java 20091229 16:48 339人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/LO-ME/p/5390323.html
Copyright © 2011-2022 走看看