D3.js:访问函数的输出

时间:2017-01-28 17:03:26

标签: javascript d3.js callback

作为Javascript的新手,我无法理解如何访问以下函数的输出:

    .append("svg:text")
      .attr("text-anchor", "middle")
      .attr('x', 0)
      .attr('y', -10)
      .attr('class', "label")

      .append('svg:tspan')
      .attr('x', 0)
      .attr('dy', 0)
      .text(dimensionLabels)

我所理解的是,当它作为回调函数在.text中传递时,它会成功返回一些显示在浏览器中的文本(例如“Header [n°1]”):

.text(dimensionLabels.split('[', 2)) 

所以我假设dimensionLabels返回一些字符串,好像我用.text(“myString”)替换.text(dimensionLabels),原始文本(“Header [n°1]”)成功替换为“myString” ”

但是,我需要做的是从dimensionLabels访问文本并处理它,例如使用:

import requests
from bs4 import BeautifulSoup

def get_html(url):
    url = ('https://m.vk.com/bageto?act=members&offset=0')
    r = requests.get(url)
    return r.text

def get_total_pages(get_html):
    soup = BeautifulSoup(get_html, 'lxml')
    pages = soup.find('div', class_='pagination').find_all('a', class_='pg_link')[-1].get('href')
    total_pages = pages.split('=')[2]
    return int(total_pages)

def main():
    base_url = 'https://m.vk.com/bageto?act=members&offset='`enter code here`
    total_pages = get_total_pages(get_html)
    for i in range(50, total_pages, 50):
        print (i)

但这会产生以下错误:

  

TypeError:dimensionLabels.split不是函数

有人可以描述上述功能是如何工作的,以及我应该怎么做来访问它的输出?

2 个答案:

答案 0 :(得分:1)

dimensionLabels看起来像是一个以字符串作为参数的函数,而不是字符串。

然后,看起来它正在查看属性的__对象,即一个名为dimensions的数组,然后查找索引[d],它可能包含要用作文本的属性title。如果没有,那么它只返回你给它的参数d

所以,如果你试图使用它,你需要传递一个字符串来返回__.dimensions[d].title的结果,或者如果找不到它,那么只需要字符串,也许就像这样{{1 }}。然后,您将收到一个字符串给您,您可以在结果或整个事件上致电dimensionsLabels("someText").split()

你这样做的方法是在一个函数上调用dimensionsLabels("someText").split('[', 2),我认为,.split()大部分都是字符串。

答案 1 :(得分:1)

.text将函数作为参数,然后在内部调用它,并传递d(基准)参数。因此,由于.text想要一个函数,只需创建自己的匿名函数并将调用包装到dimensionLabels

.text(function(d){
  var string = dimensionLabels(d);
  return string.split('[', 2);
})

对评论的回应

d3 .text方法可以使用字符串返回字符串的函数。如果你给它一个字符串,它会将文本设置为该字符串。如果你给它一个函数,那么的函数不会立即被调用。相反,在引擎盖下,d3稍后会调用它。当它发生时,它传入d参数,这个d参数是绑定到DOM的那一块的基准。 (在某些时候,您的代码是通过.data调用进行数据绑定)。

由于此行而致电dimensionLabels("myString")时收到错误消息:

__.dimensions[d].title

您有一个名为__的对象,其属性为dimensions。该属性是一个数组或对象,可以编入索引(我不知道,因为你已经提供了足够的代码供我确定):

__.dimensions["myString"]

返回 undefined undefined 永远不会有名为title的属性。而BAM,你得到了你的错误。