Как я могу создавать и запускать пользовательские события в Framer Studio (Framer.js) с помощью coffeescript?

var event = new Event('build');

// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);

// Dispatch the event.
elem.dispatchEvent(event);

введите здесь описание ссылки В этой статье показано, как создать и отправлять события DOM. Такие события обычно называют синтетическими событиями, в отличие от событий, запускаемых самим браузером.


person Amitka    schedule 19.01.2017    source источник
comment
Вы спрашиваете, как преобразовать данный JS в coffeescript?   -  person caffeinated.tech    schedule 19.01.2017
comment
Я знаю, как преобразовать его в cs, но как использовать его во фреймере? создать пользовательское событие, запустить его из элемента слоя, перехватить событие содержащим слоем?   -  person Amitka    schedule 19.01.2017


Ответы (2)


Я не уверен, что вы пытаетесь сделать, но, возможно, вам нужны настраиваемые события для объектов Framer Layer, верно?

Объект Layer имеет для этого несколько удобных сокращенных функций: on() и emit(). Вы используете их так:

layer = new Layer

customEventName = "something"

layer.on customEventName, (argument, layer) ->
    print "Custom event", argument, layer

layer.emit customEventName, 1

layer.emit customEventName, 2

Это распечатывает следующее:

» "Custom event", 1, <Layer layer id:1 (0, 0) 200x200>
» "Custom event", 2, <Layer layer id:1 (0, 0) 200x200>
person Niels    schedule 20.01.2017
comment
Спасибо, Нильс. Я не знал, что это возможно, и пробовал всевозможные обходные пути. Как насчет всплытия событий? может ли родительский слой прослушивать дочерний слой, который запускает пользовательское событие? - person Amitka; 21.01.2017
comment
Я не думаю, что мы автоматически добавляем пользовательские события. Очевидно, вы можете настроить это самостоятельно, но это немного больше работы. - person Niels; 23.01.2017
comment
Спасибо еще раз. Если не сложно, можешь показать как настроить? пример кода? - person Amitka; 24.01.2017

Получил эту ссылку из группы Framer на FB.

Вот простой пример cs, который работает для моих нужд

# npm install events
EventsEmitter = require('events')

class customEvent extends EventsEmitter
    constructor: ->
        @on "startScan", -> startAppsScan()
        @on "cancelScan", -> cancelScan()

startScanButton = new Layer
    x: Align.center
    y: Align.center(-150)
    backgroundColor: "yellow"

cancelScanButton = new Layer
    x: Align.center
    y: Align.center(150)
    backgroundColor: "red"

startScanButton.onClick ->
    evt = new customEvent
    evt.emit "startScan"

cancelScanButton.onClick ->
    evt = new customEvent
    evt.emit "cancelScan"

startAppsScan = ->
    print "starting scan...."

cancelScan = ->
    print "scan is cancelled !"
person Amitka    schedule 19.01.2017