2013-07-10 3 views
0

Я пытаюсь работать с 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> 

Любая помощь с этим было бы весьма признателен.

+0

Вы пытались использовать 'window ['cuinShow'].setText (cuin); 'в вашей функции updateText? – Divey

+0

Нет, но это тоже не исправить. Я попробовал 'stage.get ('cuinShow'). SetText (cuin);', хотя, и это дало мне эту ошибку: 'Uncaught TypeError: Object [object Object] не имеет метода setText''. Я не уверен, что это шаг вперед или назад. – belph

+0

Попробуйте использовать 'console.log (stage.get ('cuinShow'))' и проверить результат на панели разработчиков Chrome, чтобы убедиться, что это объект, который вы ожидаете. Я бы подумал, что это скорее всего проблема, но трудно сказать, не видя всего сценария или не имея более мелкий тестовый пример, который воспроизводит его. Можете ли вы воспроизвести его с помощью http://jsfiddle.net? – Divey

ответ

1

Как и Divey, это скорее всего проблема с областью.

Посмотрите на этот jsfiddle

Функция работает нормально, когда вы кладете весь код, вы упомянули один за другим в том же объеме.

Я думаю, что var cuinShow в настоящее время объявлен как var где-то, что не доступно для updateText(), как внутри другой функции, которая не включает в себя updateText().

Попробуйте удалить var из вашего текущего объявления cuinShow, а затем объявить var cuinShow снаружи в глобальном масштабе (или вверху) вашего JS-файла.

EDIT:

Вы определили:

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' 
}); 

Так UPDATETEXT() вызывается, когда вы объявляете ptext, но cuinShow не было объявлен еще! Это решается путем объявления 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 ,

+0

Я уже определил это так. Вот почему я в тупике. Вот скрипка, которую я сделал: http://jsfiddle.net/dxVuP/ – belph

+0

Отредактированный ответ выше. – projeqht

+0

И как я не видел этого ... большое вам спасибо. – belph

Смежные вопросы