2013-02-26 36 views
0

這是我用html創建的haml。但它似乎沒有給出任何結果。請幫我找出錯誤。可能是我在某處錯了語法,或者沒有得到什麼放在haml的索引部分。如何爲相應的javascript編寫haml代碼?

#!/usr/bin/env ruby 
require 'rubygems' 
require 'sinatra' 
require 'haml' 

get '/' do 
    haml :index 
end 

__END__ 
@@ layout 
%html 
    %head 

%meta{:charset => "utf-8"}/ 
:css 
    body { 
    font: 10px sans-serif; 
    } 

    .axis path, 
    .axis line { 
    fill: none; 
    stroke: #000; 
    shape-rendering: crispEdges; 
    } 

    .x.axis path { 
    display: none; 
    } 

    .line { 
    fill: none; 
    stroke: steelblue; 
    stroke-width: 1.5px; 
    } 

%body 
    %script{:src => "http://d3js.org/d3.v3.js"} 
    :javascript 
    var margin = {top: 20, right: 80, bottom: 30, left: 50}, 
     width = 960 - margin.left - margin.right, 
     height = 500 - margin.top - margin.bottom; 

    var x = d3.scale.linear() 
     .range([0, width]); 

    var y = d3.scale.linear() 
     .range([height, 0]); 

    var color = d3.scale.category10(); 

    var xAxis = d3.svg.axis() 
     .scale(x) 
     .orient("bottom"); 

    var yAxis = d3.svg.axis() 
     .scale(y) 
     .orient("left"); 

    var line = d3.svg.line() 
     .interpolate("basis") 
     .x(function(d) { return x(d.ID); }) 
     .y(function(d) { return y(d.temperature); }); 

    var svg = d3.select("body").append("svg") 
     .attr("width", width + margin.left + margin.right) 
     .attr("height", height + margin.top + margin.bottom) 
     .append("g") 
     .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

    d3.tsv("pckt_thru.tsv", function(error, data) { 
     color.domain(d3.keys(data[0]).filter(function(key) { return key !== "ID"; })); 

     data.forEach(function(d) { 
     d.ID = +d.ID; 
     }); 

     var cities = color.domain().map(function(name) { 
     return { 
      name: name, 
      values: data.map(function(d) { 
      return {ID: d.ID, temperature: +d[name]}; 
      }) 
     }; 
     }); 

     x.domain(d3.extent(data, function(d) { return d.ID; })); 

     y.domain([ 
     d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.temperature; }); }), 
     d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.temperature; }); }) 
     ]); 

     svg.append("g") 
      .attr("class", "x axis") 
      .attr("transform", "translate(0," + height + ")") 
      .call(xAxis); 

     svg.append("g") 
      .attr("class", "y axis") 
      .call(yAxis) 
     .append("text") 
      .attr("transform", "rotate(-90)") 
      .attr("y", 6) 
      .attr("dy", ".71em") 
      .style("text-anchor", "end") 
      .text("VALUES"); 

     var city = svg.selectAll(".city") 
      .data(cities) 
     .enter().append("g") 
      .attr("class", "city"); 

     city.append("path") 
      .attr("class", "line") 
      .attr("d", function(d) { return line(d.values); }) 
      .style("stroke", function(d) { return color(d.name); }); 

     city.append("text") 
      .datum(function(d) { return {name: d.name, value: d.values[d.values.length - 1]}; }) 
      .attr("transform", function(d) { return "translate(" + x(d.value.ID) + "," + y(d.value.temperature) + ")"; }) 
      .attr("x", 3) 
      .attr("dy", ".35em") 
      .text(function(d) { return d.name; }); 
    }); 
    =yield 

@@ index 
#header 
    %h1 Graph using Sinatra 

回答

0

你丟失了所有的%跡象關元素的開始,例如html應該是%html。見the tutorial。希望有所幫助。

0

如果這是確切的來源,並沒有錯別字。

你缺少%標籤上的

%html # not html 

你築巢似乎是不正確

%html 
%meta 
    %body 

%html  
    %head 
    %meta 
    %body 

試圖通過http://html2haml.heroku.com運行你原來的HTML/ERB。如果你根本不知道HAML,那可能會幫助你開始。

+0

對不起,我錯過了%。我更新了代碼,但仍然無法工作。當我通過終端運行它時,我只是得到一個空白屏幕沒有別的。 – Konix 2013-02-26 18:05:15

+0

通過終端運行它?你沒有在瀏覽器中運行它嗎? – nowk 2013-02-26 18:13:28

+0

另外,你仍然嵌套在'%html'之外。雖然我不完全確定這是否會中斷渲染,但這是不正確的。 – nowk 2013-02-26 18:21:03