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!');
}
Другие вопросы по тегам