2012-05-22 8 views
2

Я только начал использовать kineticJS, но я получаю некоторые ошибки после выполнения This учебникаkineticjs «не может вызвать метод„AppendChild“неопределенный»

Я не понимаю, почему, но я получаю исключение из внутри в KineticJS файл:

"Uncaught TypeError: cannot call method 'appendChild' of undefined".

Когда я делаю шаг за шагом alert() с, я вижу, что он останавливается после

var stage = новый Kinetic.Stage ("rightSide", 578, 200);

но наиболее определенно есть:

<canvas id="rightSide"> 
</canvas> 

Я также попытался:

<div id="rightSide"> 
</div> 

, и я получаю ту же ошибку.

Спасибо.

Edit: в ответ на комментарии ниже , это Copy-Paste из учебника:

</head> 
<body> 
<div id="container"> 
</div> 
</body> 
+0

не уверен, что это актуально, но в примере идентификатор, переданный в 'Kinetic.Stage', является контейнером, в котором есть элементы холста, а не сам идентификатор самого элемента canvas – jbabey

+0

. Я не вижу, где есть элемент холста внутри div с контейнером id. это единственный тег в теле – Gleeb

+0

сценарий из примера: 'var stage = new Kinetic.Stage (« container », 578, 200);' html из примера: '

...
' – jbabey

ответ

2

Внесение изменений в кинетику.Конструктор сцены с марта https://github.com/ericdrowell/KineticJS/commit/7ced50f6943af544dbdfc95883ec41728db1d3bd

Таким образом, собственный ответ @Gleeb отражает текущую практику в KineticJS v4.0.x вместо тех документов/учебников, которые были сделаны в раннюю эпоху v3.


Если сделать запрос нагрузочный для обратной совместимости .. что-то вроде

if(arguments.length>1){ 
config.container = arguments[0]; 
config.width = arguments[1]; 
config.height = arguments[2]; 
} 

... в конструкторе Stage.

1

Попробуйте запустить сценарий на window.onload события (как в примере) и используйте console.log() для отладки ваших переменных/объектов.

window.onload = function() { 
    var stage = new Kinetic.Stage("rightSide", 578, 200); 
    console.log('stage =', stage); // DEBUG 
}; 

... и использовать div и не canvas.

<div id="rightSide"></div> 

вы обнаружите больше учебники и официальную документацию по API на http://www.kineticjs.com/docs/symbols/Kinetic.Stage.php

+0

Мне нужно решить, какой ответ одобрить ваш или мой. вы можете объяснить, почему использование window.onload лучше, чем $ (document) .ready jquery? потому что то, что я опубликовал, фактически решило это. – Gleeb

+0

Ваш вопрос ничего не говорит о jQuery, но я бы рекомендовал использовать готовый документ, если он доступен. Важно то, что DOM закончил загрузку, прежде чем вы пытаетесь получить к ней доступ. – Stefan

2

проблема была с фактическим созданием сцены.

вместо

вар стадии = новый Kinetic.Stage ("контейнера", 578, 200);

я сделал

вар этап = новый Kinetic.Stage ({ контейнер: "контейнер", ширина: 578, высота: 200 });