- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 JavaScript 函数调用在 Handlebars 模板中创建 d3 饼图。
这是我的脚本:-
<style>
#name {
color: black;
float: left;
width: 34%;
}
#group {
color: red;
float: left;
width: 33%;
}
#wave {
color: green;
float: left;
width: 33%
}
#chart {
width: 350px;
padding: 10px;
}
#footer {
color: blue;
clear: both;
text-align: center;
padding: 5px;
}
#header {
background-color: white;
color: white;
text-align: center;
padding: 10px;
}
</style>
<div id="test"></div>
<script id="template" type="text/x-handlebars-template">
{{#each this}}
<div id="header">
<div id="wave" style="color: #000FFF; font-size: 28px">Wave</div>
<div id="name" style="color: #000000; font-size: 28px">{{name}}</div>
<div id="group" style="color: #000000; font-size: 28px">{{groupName}}</div>
</div>
<div id="table">
<table>
<tr>
<td><div id="chart">{{recommendedFoods 25 25 25 25}}</div></td>
</tr>
</table>
</div>
<div id="footer">
Questions? Contact us
</div>
{{/each}}
</script>
<script src="//d3js.org/d3.v3.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.7.0/mustache.min.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.js"></script>
<script>
$(document).ready(function (){
Handlebars.registerHelper("recommendedFoods", function(a,b,c,d) {
var w = 200;
var h = 200;
var r = h / 2;
d3.select("#chart").append("text").attr("text-anchor", "middle").style(
"font-size", "28px").style("text-decoration", "bold").text(
"Recommended");
var color = d3.scale.ordinal().range(
[ "#ffe5ff", "#ffeee5", "#d0743c", "#ff8c00" ]);
//GPVF
var data = [ {
"label" : "8",
"value" : a
}, {
"label" : "3",
"value" : b
}, {
"label" : "6",
"value" : c
}, {
"label" : "2",
"value" : d
} ];
var vis = d3.select('#chart').append("svg:svg").data([ data ]).attr(
"width", w).attr("height", h).append("svg:g").attr("transform",
"translate(" + r + "," + r + ")");
var pie = d3.layout.pie().value(function(d) {
return d.value;
});
// declare an arc generator function
var arc = d3.svg.arc().outerRadius(r);
// select paths, use arc generator to draw
var arcs = vis.selectAll("g.slice").data(pie).enter().append("svg:g")
.attr("class", "slice");
arcs.append("svg:path").attr("fill", function(d, i) {
return color(i);
// return color(d.data.value)
}).attr("d", function(d) {
console.log(arc(d));
return arc(d);
}).attr('stroke', '#fff') // <-- THIS
.attr('stroke-width', '3');
// add the text
arcs.append("svg:text").attr("transform", function(d) {
d.innerRadius = 0;
d.outerRadius = r;
return "translate(" + arc.centroid(d) + ")";
}).attr("text-anchor", "middle").text(function(d, i) {
return data[i].label;
});
//}
return this;
});
var source = $("#template").html();
var template = Handlebars.compile(source);
var string = [{"groupName":"Default Group","name":"Dummy"},{"groupName":"New","name":"Becker"}];
var ht = template(string);
$("#test").html(ht);
});
</script>
如果我在脚本中调用RecommendedFoods函数而不在模板中使用它,那么它就会正确执行。但是,我试图在函数 recommendedFood
中返回此
,但我没有看到输出上显示任何内容。谁能帮我解决这个问题吗?函数应该返回什么,以便可以使用 handle 显示它
最佳答案
这是因为当您调用 Handlebars 助手时,DOM 中还没有 #chart
元素。
所以你需要:
#chart
更改为 .chart
类,因为您将拥有多个元素strings
对象中,您已经拥有一些相关信息。查看演示 - Fiddle .
代码:
$(document).ready(function() {
var source = $("#template").html();
var template = Handlebars.compile(source);
var string = [{
"groupName": "Default Group",
"name": "Dummy",
"values": [25, 25, 25, 25]
}, {
"groupName": "New",
"name": "Becker",
"values": [10, 5, 25, 25]
}];
var ht = template(string);
$("#test").html(ht);
$('.chart').each(function(index, el) {
var w = 200;
var h = 200;
var r = h / 2;
d3.select(el).append("text").attr("text-anchor", "middle").style(
"font-size", "28px").style("text-decoration", "bold").text(
"Recommended");
var color = d3.scale.ordinal().range(
["#ffe5ff", "#ffeee5", "#d0743c", "#ff8c00"]);
//GPVF
var data = [{
"label": "8",
"value": string[index].values[0]
}, {
"label": "3",
"value": string[index].values[1]
}, {
"label": "6",
"value": string[index].values[2]
}, {
"label": "2",
"value": string[index].values[3]
}];
var vis = d3.select(el).append("svg:svg").data([data]).attr(
"width", w).attr("height", h).append("svg:g").attr("transform",
"translate(" + r + "," + r + ")");
var pie = d3.layout.pie().value(function(d) {
return d.value;
});
// declare an arc generator function
var arc = d3.svg.arc().outerRadius(r);
// select paths, use arc generator to draw
var arcs = vis.selectAll("g.slice").data(pie).enter().append("svg:g").attr("class", "slice");
arcs.append("svg:path").attr({
"fill": function(d, i) {
return color(i);
},
"d": function(d) {
console.log(arc(d));
return arc(d);
},
'stroke': '#fff',
'stroke-width': '3'
});
// add the text
arcs.append("svg:text").attr({
"transform": function(d) {
d.innerRadius = 0;
d.outerRadius = r;
return "translate(" + arc.centroid(d) + ")";
},
"text-anchor": "middle"
}).text(function(d, i) {
return data[i].label;
});
});
})
关于Handlebar 中的 Javascript 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374421/
是否可以将 Handlebars 预编译代码反编译为 Handlebars 模板? 可能转换成这样: function program2(depth0, data) { var buffer = ''
我知道它被问过很多次,我已经看过答案但不确定我哪里错了。 我查看了 Handlebarsjs 上的文档并遵循了教程,但两次我都遇到了同样的错误。
我有一个普通的 Handlebars 模板,我正在通过 puppeteer 生成 pdf。我能够正常地通过正文访问数据,但似乎无法在 JS 脚本标记中这样做。我的数据看起来像这样。 const con
我有一个问题,有时我想遍历的对象只是一个普通对象,但有时它是一个数组,因为我使用的是 {{#each}} Handlebars built-在助手中。 当对象是一个数组时,它工作得很好,但当它是一个普
我只是对 Handlebars 作为模板解决方案有了更好的了解,并且遇到了一个我不知道如何解决的问题。 我在我的布局中添加了部分,一个用于页眉,一个用于页脚,用于从我的 View 中动态插入脚本。但是
在我的 Handlebars 模板中,我检查变量是否存在,如果存在则呈现一些文本: {{#if foo}} some text {{/if}} 如果 foo 是文本或者 foo 是数字但不是零,这
所以我已经阅读了关于 Handlebars partials 的官方文档. 它指出: In order to use a partial, it must be registered via Hand
我有一个“国家/地区”对象,我将其作为 Handlebars 上下文的一部分传递: { 'hk': {'name': 'Hong Kong', 'someotherprop': 'someother
我有一个广泛的新闻源 (JSON),但我只需要在主页上向用户显示前三个新闻。有没有办法从第四个开始丢弃?比如: {{#each news}} {{ if index {{title}} - {{d
使用动态部分时有没有办法进行部分故障转移? Handlebars partials documentation 显示动态部分,并且只显示带有硬编码部分名称的故障转移。 最佳答案 这里有一个 githu
我有一个像这样的文件夹结构: - components/ - foo/ - index.js - foo.handlebars - foo.scss - bar/
我采用了一个带有 Handlebars 的项目,但遇到了让 handlebars 在客户端呈现模板的问题。 基本上,目前的设置方式是模板在服务器端呈现。我现在正处于需要能够使用以下方法在 AJAX 响
如何手动使用预编译的 handlebars.js 模板? 假设,我们有 source = "Hello, my name is {{name}}" data = { name: "Joe" } 目前,
我正在使用 Handlebars 的运行时构建并尝试使用已注册的部分。我愿意: Handlebars.registerPartial("path/partialname", Handlebars.te
我正在使用 Handlebars 在服务器端渲染代码(无角度/ Ember ) 我还能以某种方式拥有一些东西吗:{{{content}}} 我只想在bolean为true的情况下才拥有CSS类 类似于
在 Handlebars 2+ 中,如何在这样的循环中动态读取属性? objects是一个对象数组。 keys是一个字符串数组。我想为每个对象循环每个键并放置它的 .foo span 中的值. {{#
我正在尝试创建一个表,该表使用来自JSON文件的对象填充每个表单元格。我的 Handlebars 模板只为每个对象添加了数据。我想完成的是为第5个项目创建一个新行,然后继续填充表格单元格,直到第10个
例如,您可以看到 {{{body}}} 并且在模板中,您可以执行类似 {{data.page.hero.text}} 的操作 有什么我们应该注意的显着差异吗? 最佳答案 Handlebars HTML
我有两个使用的 Handlebars helper 。 首先是 timeboundset ,它接受一个数组和一个日期字段,并且仅选择和应用落在该日期字段之后的那些元素。 第二个是 sortedset
是否可以在 Handlebars 条件中使用全局变量?我正在编写一个列出很多对象的应用程序,我希望用户能够控制列出哪些详细信息。例如,在人员列表中仅显示名字,如下所示: {{#each people
我是一名优秀的程序员,十分优秀!