D3.js 如何使用Cubism.js进行“一次准备,多次回调”

D3.js 如何使用Cubism.js进行“一次准备,多次回调”,d3.js,cubism.js,D3.js,Cubism.js,D3.js Cubism.js。。。漂亮的工作。 我尝试将Cubism.js与自己的数据源一起使用,需要同步显示多个地平线图。 更新的间隔非常短,小于1s,这就是为什么我需要从数据源批量获取值-所有这些都在一次调用中。 如果在比较请求的START、STOP和存储的lastSTART、lastSTOP时加载最新数据,则会做出此决定。 它在我的代码中工作,但我不知道如何正确地为每个地平线图调用数据更新回调函数。 At显示仅更新最后一个图形。 有人能帮我解决这个问题吗 代码: PHP后端: 仅用于模拟

D3.js Cubism.js。。。漂亮的工作。 我尝试将Cubism.js与自己的数据源一起使用,需要同步显示多个地平线图。 更新的间隔非常短,小于1s,这就是为什么我需要从数据源批量获取值-所有这些都在一次调用中。 如果在比较请求的START、STOP和存储的lastSTART、lastSTOP时加载最新数据,则会做出此决定。 它在我的代码中工作,但我不知道如何正确地为每个地平线图调用数据更新回调函数。 At显示仅更新最后一个图形。 有人能帮我解决这个问题吗

代码:

PHP后端: 仅用于模拟目的-返回带有时间戳值的命名数组的JSON对象 可能类似于Cube.js

<?php
//default:
    $GP = array('list' => '["all"]');
    if (isset($_POST['expression']))    $GP['expression']   =$_POST['expression'];      elseif (isset($_GET['expression'])) $GP['expression']   =$_GET['expression'];
    if (isset($_POST['start']))         $GP['start']        =$_POST['start'];           elseif (isset($_GET['start']))      $GP['start']        =$_GET['start'];
    if (isset($_POST['stop']))          $GP['stop']         =$_POST['stop'];            elseif (isset($_GET['stop']))       $GP['stop']         =$_GET['stop'];
    if (isset($_POST['step']))          $GP['step']         =$_POST['step'];            elseif (isset($_GET['step']))       $GP['step']         =$_GET['step'];
    if (isset($_POST['list']))          $GP['list']         =$_POST['list'];            elseif (isset($_GET['list']))       $GP['list']         =$_GET['list'];

    if ( ! (    isset($GP['expression']) && isset($GP['start']) &&  isset($GP['stop'])  &&  isset($GP['step'])  )   )   {
        exit;
    }
    $iso_format = "%Y-%m-%dT%H:%M:%S.%LZ";
    $start = umktime(strptime($GP['start'], $iso_format));
    $stop  = umktime(strptime($GP['stop' ], $iso_format));
    $step =  $GP['step' ];  //milisecs

    $GP['list'] = json_decode($GP['list']);  if (! $GP['list']) { exit;}
    $cnt = count($GP['list']);
    $larray = array();

    for($i = 0; $i < $cnt; $i++) {
        $rarray = array();
        for ($dt = $start; $dt <= $stop; $dt+= ($step/1000.)) {
            $rarray[] = 
            array(
                "time"=> strftime("%Y-%m-%dT%H:%M:%S",$dt).sprintf(".%03dZ",($dt - (int)$dt)*1000),
                "value"=> rand(-50,150)
            );
        }
        $larray[$GP['list'][$i]] = $rarray;
    }
    echo json_encode($cnt == 1 ? $rarray : $larray);



function umktime($u_tm_arr) {
//int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
    $mkt = mktime(  $u_tm_arr['tm_hour'],$u_tm_arr['tm_min'],$u_tm_arr['tm_sec'],$u_tm_arr['tm_mon']    + 1,$u_tm_arr['tm_mday'],($u_tm_arr['tm_year']  + 1900) - 2000  );
    $mkt = (float)$mkt;
    if (isset($u_tm_arr['tm_msec'])) {      $mkt += (((float)$u_tm_arr['tm_msec'])/1000) ;  }
    return $mkt;
}

//Windows strptime
function strptime($date, $format) { 
    $masks = array( '%d' => '(?P<d>[0-9]{2})',  '%m' => '(?P<m>[0-9]{2})',  '%Y' => '(?P<Y>[0-9]{4})',  
                    '%H' => '(?P<H>[0-9]{2})',  '%M' => '(?P<M>[0-9]{2})',  '%S' => '(?P<S>[0-9]{2})',      // usw.. 
                    '%L' => '(?P<L>[0-9]{3})',  '%u' => '(?P<u>[0-9]{3})', 
    ); 
    $rexep = "#".strtr(preg_quote($format), $masks)."#";
    if(!preg_match($rexep, $date, $out)) {
      return false; 
    }
    $ret = array(   "tm_sec"  => (int) $out['S'], "tm_min"  => (int) $out['M'], "tm_hour" => (int) $out['H'], 
                    "tm_mday" => (int) $out['d'], "tm_mon"  => $out['m']?$out['m']-1:0,  "tm_year" => $out['Y'] > 1900 ? $out['Y'] - 1900 : 0, 
                    "tm_msec" => (int) (isset($out['u']) ? $out['u'] : (isset($out['L']) ? $out['L'] : 0)     ), 
    ); 
    return $ret; 
  } 
?>
<?php
//default:
    $GP = array('list' => '["all"]');
    if (isset($_POST['expression']))    $GP['expression']   =$_POST['expression'];      elseif (isset($_GET['expression'])) $GP['expression']   =$_GET['expression'];
    if (isset($_POST['start']))         $GP['start']        =$_POST['start'];           elseif (isset($_GET['start']))      $GP['start']        =$_GET['start'];
    if (isset($_POST['stop']))          $GP['stop']         =$_POST['stop'];            elseif (isset($_GET['stop']))       $GP['stop']         =$_GET['stop'];
    if (isset($_POST['step']))          $GP['step']         =$_POST['step'];            elseif (isset($_GET['step']))       $GP['step']         =$_GET['step'];
    if (isset($_POST['list']))          $GP['list']         =$_POST['list'];            elseif (isset($_GET['list']))       $GP['list']         =$_GET['list'];

    if ( ! (    isset($GP['expression']) && isset($GP['start']) &&  isset($GP['stop'])  &&  isset($GP['step'])  )   )   {
        exit;
    }
    $iso_format = "%Y-%m-%dT%H:%M:%S.%LZ";
    $start = umktime(strptime($GP['start'], $iso_format));
    $stop  = umktime(strptime($GP['stop' ], $iso_format));
    $step =  $GP['step' ];  //milisecs

    $GP['list'] = json_decode($GP['list']);  if (! $GP['list']) { exit;}
    $cnt = count($GP['list']);
    $larray = array();

    for($i = 0; $i < $cnt; $i++) {
        $rarray = array();
        for ($dt = $start; $dt <= $stop; $dt+= ($step/1000.)) {
            $rarray[] = 
            array(
                "time"=> strftime("%Y-%m-%dT%H:%M:%S",$dt).sprintf(".%03dZ",($dt - (int)$dt)*1000),
                "value"=> rand(-50,150)
            );
        }
        $larray[$GP['list'][$i]] = $rarray;
    }
    echo json_encode($cnt == 1 ? $rarray : $larray);



function umktime($u_tm_arr) {
//int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
    $mkt = mktime(  $u_tm_arr['tm_hour'],$u_tm_arr['tm_min'],$u_tm_arr['tm_sec'],$u_tm_arr['tm_mon']    + 1,$u_tm_arr['tm_mday'],($u_tm_arr['tm_year']  + 1900) - 2000  );
    $mkt = (float)$mkt;
    if (isset($u_tm_arr['tm_msec'])) {      $mkt += (((float)$u_tm_arr['tm_msec'])/1000) ;  }
    return $mkt;
}

//Windows strptime
function strptime($date, $format) { 
    $masks = array( '%d' => '(?P<d>[0-9]{2})',  '%m' => '(?P<m>[0-9]{2})',  '%Y' => '(?P<Y>[0-9]{4})',  
                    '%H' => '(?P<H>[0-9]{2})',  '%M' => '(?P<M>[0-9]{2})',  '%S' => '(?P<S>[0-9]{2})',      // usw.. 
                    '%L' => '(?P<L>[0-9]{3})',  '%u' => '(?P<u>[0-9]{3})', 
    ); 
    $rexep = "#".strtr(preg_quote($format), $masks)."#";
    if(!preg_match($rexep, $date, $out)) {
      return false; 
    }
    $ret = array(   "tm_sec"  => (int) $out['S'], "tm_min"  => (int) $out['M'], "tm_hour" => (int) $out['H'], 
                    "tm_mday" => (int) $out['d'], "tm_mon"  => $out['m']?$out['m']-1:0,  "tm_year" => $out['Y'] > 1900 ? $out['Y'] - 1900 : 0, 
                    "tm_msec" => (int) (isset($out['u']) ? $out['u'] : (isset($out['L']) ? $out['L'] : 0)     ), 
    ); 
    return $ret; 
  } 
?>