1

这是我正在使用的代码。这个简单的功能只是为了测试我做得正确。显然,我不是。出于一个让我无法理解的原因,除非我注释掉第一个函数,否则我总是会遇到同样的错误。

// Build an arrow from first to second
var buildEdge = function(first, second)
{
    var arrow;
    arrow = {
        type: 'path',
        path: "M " + first.x + " " + first.y + " " +
              "L " + second.x + " " + second.y,
        stroke: 'black'
    };
    return arrow;
};

var first = {
    type: 'circle',
    x: 100,
    y: 100,
    radius: 50,

    fill: '#99FF99',
    stroke: '#55CC55',
    'stroke-width': 2
};
// .........

first并且second都是 ExtJS 精灵。运行此 FireBug 时,总是会提供这个有用的错误:

TypeError: this[("getPath" + a.type)] is not a function http://cdn.sencha.io/ext-4.2.0-gpl/ext-all.js Line 21

我已经浏览了ext-all.js,但我不太了解 ExtJS 的内部工作原理并且不想(无论如何对于这个项目)。我承认我是 JavaScript 的新手,但我知道这段代码无论如何都会“编译”。是的,当我删除此功能时,我确实可以正确显示其他精灵 (first和)。second

我希望我在这里犯了一些愚蠢的新手错误,所以欢迎任何帮助。谢谢!

4

1 回答 1

1

也许试试这段代码,看看会发生什么?

// Build an arrow from first to second
// surface param is surface instance sprite is to be added to.
var buildEdge = function(first, second, surface)
{
    var arrow;
    arrow = Ext.create('Ext.draw.Sprite', {
        type: 'path',
        path: "M " + first.x + " " + first.y + " " +
              "L " + second.x + " " + second.y,
        stroke: 'black'
    });

    surface.add(arrow);
    arrow.show(true);

  //return arrow if you want to work with it elsewhere outside of method.
};

笔记:

查看 clasificado 对 surface.add() 方法的评论。

“如果您在引发渲染事件后以编程方式添加新精灵,则需要手动调用新精灵的 .show(true) 方法”

http://docs.sencha.com/extjs/4.1.1/#!/api/Ext.draw.Surface-method-add

于 2013-10-24T13:55:15.100 回答