Как получить вывод данных JSON по событию через runEvent() в ColdBox?

У меня есть событие, которое выводит данные через event.renderData(data=mydata, "json").

Когда я обращаюсь к нему через браузер, данные JSON возвращаются, как и ожидалось. Хотя, если я вызываю событие из другого события, я получаю только пустую строку. Я сохраняю вывод следующим образом:

savecontent variable="local.eventResult" {
  runEvent(event="mymodule:myhandler.myaction");
}

Если я сбрасываю данные в рамках события, все выглядит нормально. Я пытался получить данные через return event.renderData(data=mydata, "json"); и вернуть данные напрямую, то есть return mydata;, но безуспешно.

Что я должен сделать, чтобы получить данные, как ожидалось?


person Sebastian Zartner    schedule 24.07.2018    source источник


Ответы (1)


Я задал аналогичный вопрос на канале ColdBox Slack и получил ответ, что такое поведение является преднамеренным. Вы не можете использовать renderData() для возврата вывода из runEvent(). Вот ответ, который я получил от Луиса М.:

RenderData в основном используется для запроса маршаллинга данных, а не для события, если вы хотите, чтобы событие что-то вернуло, тогда просто используйте return

Пример:

function test( event, rc, prc  ) {
  return "<p>MyViewlet</p>";
}

В вашем примере, если вы хотите выводить данные в формате JSON, вы можете использовать в своем обработчике следующее:

function myAction( event, rc, prc  ) {    

    var myData = {
        fruit = "apple",
        vegetable = "carrot"
    };

    return serializeJSON( myData );

}
person Dave L    schedule 12.02.2019