Одноэлементные методы Ruby с (class_eval, define_method) по сравнению с (instance_eval, define_method)

Я создал несколько потоков в веб-приложении

blockquote>

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


Я хотел бы обновить таблицу автоматически, чтобы показать текущее состояние потока. Есть ли какой-либо компонент предварительной сборки, который я могу использовать в этом сценарии?

blockquote>

Вы в основном ищете технику под названием «опрос» или «нажатие». Основная концепция опроса заключается в использовании JavaScript setInterval() или setTimeout() для запуска HTTP-запроса (ajax) на сервер через интервалы времени и позволяет обрабатывать результаты соответствующим образом. Основная концепция pushing - открыть постоянное HTTP-соединение и передать серверу небольшие сообщения по нему, это можно сделать среди других WebSocket в JavaScript и JSR356 API в Java EE 7 .

Стандартная реализация JSF не предлагает готового к использованию опроса или push-компонента из коробки. Для предстоящего JSF 2.3 в настоящее время выполняется новый тэг (см. Также issue 1396 ).

Лучше всего будет скрытая форма со скрытой ссылкой на команду / с помощью , а затем вызовите его с помощью setInterval(). Однако библиотеки компонентов, такие как PrimeFaces , предлагают готовые к использованию компоненты, см. Также витрины и витрины для некоторых конкретные примеры. Библиотека утилиты JSF OmniFaces имеет в своем витрине пример опроса и в витрине несколько примеров нажатия (новый стандарт JSF будет в значительной степени базироваться на ).

См. также:

17
задан davidk01 3 July 2010 в 08:23
поделиться

1 ответ

Нет разницы для define_method. Но есть разница, когда вы используете def.

o = Object.new  

# class_eval example
class << o; self; end.class_eval { def test1;  :test1; end  }
o.test1 #=> test1

# instance_eval example
class << o; self; end.instance_eval { def test2; :test2; end }
o.test2 #=> NoMethodError

Почему разница в поведении между def и define_method? define_method является вызовом метода и поэтому работает с self в контексте eval. self в instance_eval и class_eval одинаковы - это приемник (собственный класс o).

Однако def ведет себя по-разному, он работает не на self, а на default define . В случае class_eval default definee совпадает с self, но для instance_eval это вместо метакласса self.

Как получить доступ к методу test2, определенному выше? test2 должен быть методом экземпляра, определенным в метаклассе собственного класса o.

Это метод класса на собственном классе o:

class << o; test2; end #=> :test2
21
ответ дан 30 November 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: