我正在尝试与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>
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
就像Divey所说,这很可能是一个范围问题。
看看这个jsfiddle
当你把你提到的所有代码一个接一个地放在同一个范围内时,该函数运行正常。
我的猜测是var cuinShow
被var
声明为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}}。