2013-08-20 3 views
0

자바 + rhino + evjs + d3을 통해 svg를 렌더링하려고합니다. 모든 것이 선형 스케일로 잘 작동합니다. 시간 척도에 대해서만 해결할 수없는 문제가 있습니다.d3 시간 척도는 NaN을 제공합니다.

자바 스크립트의 작은 조각을 확인하십시오 :

DATA는 코뿔소 스크립트 범위에서 자바 객체입니다
function Scale_timed(f,domain,range){ 
    var obj = this; 
    this.field = f; 

    // print (DATA.jsGetDomain(domain)[0] + "/" + DATA.jsGetDomain(domain)[1]); 
    // print (range[0] + "/" + range[1]); 
    this.scale = d3 
     .time.scale() 
     .range(range) 
     .domain(DATA.jsGetDomain(domain)); 

    this.get = function(i) { 
     print("lala: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i))); 
     return obj.scale(DATA.jsGetPrimitive(obj.field,i)); 
    }; 
} 

. 결과는 scale 함수 입력 매개 변수가 Date임을 분명히 보여 주지만 저의 scale 함수에서 NaN을 얻습니다.

출력 :

lala: Tue Jan 04 00:00:00 CET 2011 - 4 - NaN 
lala: Wed Jan 05 00:00:00 CET 2011 - 5 - NaN 
lala: Thu Jan 06 00:00:00 CET 2011 - 6 - NaN 
lala: Fri Jan 07 00:00:00 CET 2011 - 7 - NaN 
lala: Mon Jan 10 00:00:00 CET 2011 - 10 - NaN 

나는 내가 단지 D3 태그이 요청할 것입니다 ... 문제가 어딘가에 D3 규모 사용량 생각합니다.

편집 :이 아주 잘 작동합니다 :

function Scale_timed(f,dom,range){ 
    var obj = this; 
    this.field = f; 

    // print (DATA.jsGetDomain(domain)[0].getDate() + "/" + DATA.jsGetDomain(domain)[1].getDate()); 
    // print ("range: "+ range[0] + "/" + range[1]); 
    this.scale = d3 
     .scale.linear() //.time.scale() 
     .range(range) 
     .domain([DATA.jsGetDomain(dom)[0].getTime(), DATA.jsGetDomain(dom)[1].getTime()]) 
     //.domain(DATA.jsGetDomain(dom)) 
     .nice(); 

    this.get = function(i) { 
     print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i).getTime())); 
     return obj.scale(DATA.jsGetPrimitive(obj.field,i)); 
    }; 
} 

지금 내가 생각하는 그 코뿔소 문제, 어쩌면 Date.protype 기능이없는 ... 사실은 코뿔소의 문제에서

+0

무엇이'range'입니까? 전달중인 값이 외부에있을 수 있습니다. –

+0

@LarsKotthoff 범위는 다음과 같습니다. [0,650] – KIC

+0

도메인이란 무엇입니까? –

답변

0

, rhino는 java.util.Date를 날짜로 사용하고 ECMA 날짜는 사용하지 않으므로 직접 변환해야합니다. 그러나 이것은 작동합니다 :

function Scale_timed(f,dom,range){ 
    var obj = this; 
    var domain = DATA.jsGetDomain(dom); 
    for (var i=0;i<domain.length;i++) domain[i] = new Date(domain[i].getTime()); 

    this.field = f; 

    this.scale = d3 
     .time.scale() 
     .range(range) 
     .domain(domain) 
     ; 

    this.get = function(i) { 
     // print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(DATA.jsGetPrimitive(obj.field,i).getTime())); 
     print("time: " + DATA.jsGetPrimitive(obj.field,i) + " - " + (DATA.jsGetPrimitive(obj.field,i).getDate()) + " - " + obj.scale(new Date(DATA.jsGetPrimitive(obj.field,i).getTime()))); 
     return obj.scale(new Date(DATA.jsGetPrimitive(obj.field,i).getTime())); 
    }; 
} 
관련 문제