2016-05-27 5 views
0

Во-первых, у меня есть p5.js сценарий:Экспорт функции из p5.js с Browserify

//canvas.js 
var p5 = require('p5') 

module.exports = new p5(function() { 
    this.setup = function setup() { 
    this.createCanvas(700, 400) 
    this.background(205) 
    this.loadImage('/uploads/uploaded_image', function (img) { 
     image(img, 0, 0) 
    }) 
    this.updatePixels() 
    } 
    this.clearCanvas = function redraw() { 
    this.background('black') 
    } 

Все это в новом объекте p5 так, что он будет связывать с browserify потому p5, как я понимаю, прогонов в глобальном пространстве имен. Это работало отлично, но мне нужна кнопка, которая превратила бы весь холст в черный цвет, поэтому я добавил новую функцию clearCanvas, которая перерисовывает холст в черном. Я добавил часть module.exports, чтобы я мог потребовать в объекте p5 и использовать эту новую функцию в другом скрипте. Затем я добавил кнопку в моем нефритом файле:

button(type='button', id='clear'). 
      Click to clear 

И затем я создал обработчик, который требовал бы в p5 экспортируемого объекта и использовать clearCanvas функционировать OnClick:

var canvas = require('./canvas.js') 

document.getElementById('clear').onclick = function() { 
    canvas.clearCanvas() 
} 

В результате это две ошибки в консоли:

bundle.js: 34633 Uncaught TypeError: не удается установить свойство 'OnClick' нулевых

bundle.js: 14197 p5 были проблемы с созданием глобальной functi на «clear», возможно, потому, что ваш код уже использует это имя как переменную. Вы можете переименовать переменную в другое.

ответ

0

Ответ на этот вопрос здесь:

Exporting p5.js function with Browserify

p5.js работает в глобальном объекте и экспортировать функцию, которая не встроенный в p5 вы должны запустить p5 в режиме экземпляра. Это также позволяет запускать несколько экземпляров p5.