Название не очень специфическое, я извиняюсь, но я не уверен, что спрашивать более конкретно.
Полный jsfiddle: https://jsfiddle.net/scottbrown0001/byz63qxm/6/
Я запутался, почему ниже код следующее поведение: линии
d3.select(this).select('.here').text(name);
места ожидаемые значения "Foo 1" и "Foo 2" name
в каждом из двух див, но линия
d3.select(this).select('.there').text(thisFoo.name);
всегда ставит в обеих дивах тот же экземпляр name
.
Кажется очевидным, что это проблема, или что-то в этом роде, но я не понимаю, почему она ведет себя так, как она.
<style>
div {margin: 20px; }
.top {margin-top: 40px; }
</style>
</head>
<body>
<div class='top top1'>
<div class='clicker'>
CLICK ME
<div class='here'> HERE </div>
<div class='there'> THERE </div>
</div>
</div>
<div class='top top2'>
<div class='clicker'>
CLICK ME
<div class='here'> HERE </div>
<div class='there'> THERE </div>
</div>
</div>
<script src="//d3js.org/d3.v4.min.js"></script>
<script>
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
d3.selection.prototype.trigger = function(event, detail) {
var e = new CustomEvent(event, detail);
this.node().dispatchEvent(e);
return this;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function Foo(where, name) {
this.name = name;
var top = d3.select('.' + where);
var clicker = top.select('.clicker');
thisFoo = this;
clicker.on(
'click',
function(){
d3.select(this).select('.here').text(name);
d3.select(this).select('.there').text(thisFoo.name);
}
)
}
foo1 = new Foo('top1', 'Foo 1');
foo2 = new Foo('top2', 'Foo 2');
</script>
</body>
</html>
Thanks Julien! Довольно просто, но я полностью пропустил это! – Scott