【问题标题】:JavaScript callback function seems to work, but does not draw the dataJavaScript 回调函数似乎工作,但不绘制数据
【发布时间】:2015-11-24 08:40:13
【问题描述】:

我已经学习过很多关于回调的教程(例如hereon SOthis gem
到目前为止,最好的一个是this gem。特别是这部分帮助我理解。

function addOne(thenRunThisFunction) {
  waitAMinuteAsync(function waitedAMinute() {
    thenRunThisFunction()
  })
}

addOne(function thisGetsRunAfterAddOneFinishes() {})

所以我按照那里的描述实现了它。现在一切似乎都可以在控制台输出上运行,但它并没有按预期呈现我的 d3 强制有向图

[some fancy variables used by force graph]

function draw(json) {
    java.alert(json);
    [awsome force graph stuff]
};

var data = undefined;

function readInputStream(callback){
    data = java.getJSONObject();
    if(!data == ""){
        java.alert("success");
    } else {
        java.alert("failure");
    }
    callback();
}

function prepareDraw() {
    java.alert("prepare called");
    draw(data);
}

readInputStream(prepareDraw);

请注意java 是一个标识符。我在 JavaFX WebView 中运行它,java. 之后的所有方法都是我在 JavaScript 中使用的实际 java 方法。看到这个:

public class JStoFXBridge {
    private String json;

    public String getJSONObject(){
        return json;
    }
    public void setJSONObject(String string){
        this.json = string;
    }
    public void alert(String alert){
        System.out.println("Alert: " + alert);
    }
}

现在我的控制台打印:

Alert: success
Alert: prepare called
Alert: {"nodes":[{"name":"sepp","id":0,"group":2},{"name":"hans","id":1,"group":6}, [...]

哪种格式适合我的 JSON 字符串,哪种格式(据我所知)按正确的顺序执行。 data 被填满并且不为空。 the callback method 被调用。我的draw function 有一个filled & valid JSON 字符串。这里出了什么问题?我不知道为什么这不起作用。

【问题讨论】:

  • 您的代码看起来不错,至少流程是您所期望的(您可以从输出中看到)。您确定问题不在于您遗漏的draw() 部分吗?
  • 如果我要复制 JSON 字符串并将其直接分配给 var data 并调用 draw(data); 它会起作用,所以我看不到那里的问题。

标签: javascript json d3.js


【解决方案1】:

有时它比你想象的要容易......

java.alert("prepare called");
var json = JSON.parse(data);
draw(json);

问题:data 是一个字符串,d3 想要一个 JSON 对象。 Watch here。新输出:

Alert: success
Alert: prepare called
Alert: [object Object]

现在可以很好地呈现图形。 var data = {"nodes":[{"name":"sepp", [...] 有效,因为 JavaScript 将其解释为 JSON 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2018-01-23
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多