KineticJS:定义的对象未定义?

时间:2013-07-10 17:19:45

标签: javascript html5 object canvas kineticjs

我正在尝试与KineticJS合作,我遇到了麻烦:

好的,所以在我的JavaScript文件的顶部区域,我有以下一点点花絮:

var cuin = '';
//...
var cuinShow = new Kinetic.Text({
 x: 320,
 y: 81,
 text: '',
 fontSize: 18,
 fontFamily: 'Lucida Bright',
 fill: 'black'
});

然后我有这个功能:

function updateText(){
    cuinShow.setText(cuin);
    return current + getAction() + $.localStorage('difficulty') + " =";
}

经过测试,Chrome告诉我它不喜欢我的代码:

Uncaught TypeError: Cannot call method 'setText' of undefined

现在,我知道它可能与cuinShow的范围有关,但我不知道是什么。此外,如果它意味着什么(我认为不会,但以防万一),我已将此脚本与KineticJS一起外化。 这是html:

<!DOCTYPE html>
<head><script src="jquery-1.10.2.min.js"></script>
    <script src="jquery.storage.js"></script></head>
<body>
    <div id="container"></div>
    <script src="kinetic-v4.5.4.min.js"></script>
    <script src="kgame.js" defer="defer"></script>
</body>

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

就像Divey所说,这很可能是一个范围问题。

看看这个jsfiddle

当你把你提到的所有代码一个接一个地放在同一个范围内时,该函数运行正常。

我的猜测是var cuinShowvar声明为updateText()无处可访问的updateText(),就像在另一个不包含var的函数中一样。

尝试从当前cuinShow声明中删除var cuinShow,然后在JS文件的全局范围(或​​顶部)声明var ptext = new Kinetic.Text({ x: 193.5, y: 84, text: updateText(), fontSize: 18, fontFamily: 'Lucida Bright', fill: 'black' });

修改

你定义了:

var cuinShow = new Kinetic.Text({
  name: 'cuinShowName',
  x: 320,
  y: 81,
  text: '',
  fontSize: 18,
  fontFamily: 'Lucida Bright',
  fill: 'black'
});

在定义之前:

ptext

因此,在声明cuinShow时会调用updateText(),但尚未声明cuinShow!这可以通过在ptext之前声明updateText()来解决。

此外,您的function updateText(){ console.log(textLayer.get('cuinShow')); (textLayer.get('.cuinShowName')).each(setText(cuin)); return current + getAction() + $.localStorage('difficulty') + " ="; } 函数有一些错误:

function updateText(){
  textLayer.get('.cuinShowName').each(function() {
    this.setText(cuin)
  });
  return current + getAction() + $.localStorage('difficulty') + " =";
}

应该是这样的:

setText()

this需要一个前面的对象,因此您需要在each函数中使用{{1}}。