Paper.js Совместимость
Я хотел бы вызывать функции paper.js из кнопок HTML на моей странице, но я считаю, что функции paper.js существуют в своей собственной области. В документах paper.js упоминается о совместимости, которая звучит как правильное прямое, и тогда я перехожу на страницу с надписью "скоро":
http://paperjs.org/tutorials/getting-started/paperscript-interoperability/
Кто-нибудь знает, как я могу вызвать функцию, созданную в сценарии paper.js с моей HTML-страницы?
2 ответа
Извиняюсь за этот пропавший учебник. Я действительно потрачу немного времени на то, чтобы написать это наконец.
Я ответил на этот вопрос в списке рассылки в прошлом году: https://groups.google.com/d/msg/paperjs/C6F0XFlplqM/_67AMqCR_nAJ
Scoped PaperScript запускается внутри глобальной области и имеет доступ ко всем элементам глобальной области. Обычные скрипты Java, работающие в глобальной области видимости (= окно), не увидят эти PaperScopes и не будут иметь доступа к их переменным.
Существует простое решение для обмена информацией между ними: просто объявите глобальную структуру, которую вы используете для обмена вещами назад и вперед, например,
window.globals = {
someValue: 10,
someFunction: function() { alert(globals.someValue); }
};
В вашем PaperScript вы можете получить доступ к этому просто через "глобальные переменные", поскольку он находится в области видимости окна:
globals.someValue = 20;
globals.someFunction();
И таким же образом вы можете использовать эту структуру из обычного JavaScript.
Я просто хотел добавить некоторые разъяснения для тех, кто сталкивается с этим.
Для совместимости PaperScript-to-JavaScript сделайте следующее...
В HTML-файле:
<button type="button" id="btn">Click Me!</button>
В файле JavaScript:
$(document).ready(init);
function init(jQuery) {
$("#btn").click(window.globals.paperClicked);
}
// PaperScript Interop
window.globals = {
paperClicked: function() {}
}
В файле PaperScript:
// JavaScript Interop
globals.paperClicked = internalClicked;
function internalClicked() {
alert('clicked!');
}