gpt4 book ai didi

javascript - d3 : drawing elements correctly but not adding new data to the dom

转载 作者:行者123 更新时间:2023-11-28 02:31:56 24 4
gpt4 key购买 nike

使用 d3,我有一些像这样的简单标记:

<div id="my-log"></div>

我有一个使用 d3 进行渲染的对象。我有很多可以绘制图表和图表的工具,但这个只是打印日志。

代码如下:

class Log

# Run on DOM Ready
constructor: (selector,data) ->
@s = selector
@data = data || this.mockData()
this.setup()
this.draw()

# Append a message onto the end of the log. Optionally shift the first point off.
pushData: (message, shift = false) ->
@data.push message
@data.shift() if shift
this.update()

mockData: ->
[{
sender: 'tester',
message: 'foo bar baz'
}]

template: (data) ->
"""
<div class="sender">#{data.sender}</div>
<div class="message">#{data.message}</div>
"""

setup: ->
@container = d3.select(@s).append('ul').attr('class','log')

draw: ->
@container.selectAll('li')
.data( @data )
.enter().append('li')
.html (d) => this.template(d)

update: ->
@container.selectAll('li')
.data( @data )
.html (d) => this.template(d)

为了初始化它,我这样调用它:

jQuery ->
myLog = new Log 'div#my-log'

这会正确选择 div 并将消息呈现到其中。

但是,如果我尝试在控制台中添加日志消息:

log.pushData({sender:'test', message:'foo'});

...这不会渲染到 DOM。如果我在控制台中调用 log.data,我会看到数据就在那里,只是没有到达 DOM。

我无法发现我的错误,有什么想法吗?

最佳答案

您在更新中忘记了.enter

update: ->
@container.selectAll('li')
.data( @data )
.enter().append('li')
.html (d) => this.template(d)

作为注释,您还应该添加 .exit 进行更新

关于javascript - d3 : drawing elements correctly but not adding new data to the dom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com