Groovy Mixins?

Вы можете сделать это, используя MouseMove События для вашей кнопки и окружающий раздел формы (который, вероятно, будет Деталь формы).

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

enter image description here

[ 1110] Выше приведено два следующих обработчика событий:

Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If MyComment.Visible Then MyComment.Visible = False
End Sub
Private Sub MyButton_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Not MyComment.Visible Then MyComment.Visible = True
End Sub

Здесь кнопка называется MyButton, а метка, содержащая комментарий, называется MyComment.

10
задан gabriel 8 January 2009 в 19:50
поделиться

4 ответа

Я не думаю, что Вы используете надлежащий синтаксис смешивания. Попробуйте это:

class MyMixin {
    static doStuff(Person) {
        'stuff was done'
    }
}

class Person {}

Person.mixin MyMixin

new Person().doStuff()
11
ответ дан 3 December 2019 в 15:06
поделиться

К вашему сведению: существует такая вещь как "встроенные" домены в Grails теперь, но это имеет проблемы. Это - то, где можно логически включать один домен как часть другого и иметь его поля, все происходят физически в одной Таблице базы данных. Например, если Вы находите, что у Вас есть то же подмножество полей, появляющихся в нескольких таблицах, как конкретный адрес/city/state/zip, Вы могли определить домен StreetAddress и встроить его. Одна из текущих проблем - то, что Grails все еще составит street_address таблицу в дополнение к встраиванию ее полей в других таблицах (если Вы не будете выделывать фокусы). Там отправлены патчи, ожидающие для этого, это кажется.

1
ответ дан 3 December 2019 в 15:06
поделиться

Я предполагаю то, что Вы видели, что существует скорее предложение, чем функция ;) Groovy таким образом уже не поддерживает mixins из поля (если когда-нибудь). Но существует сторонний lib, который может использоваться для эмуляции такого behavour: Injecto. И mixins может быть определен с помощью Макросов AST в 1,6 версиях Groovy (который еще не является окончательным).

Необходимо всегда проверять, читают ли Ваш документы из реального отличного проекта или из проекта GroovyJSR (который является скорее местом, где предложения собраны).

Иначе должен использовать простой MOP для введения поведения в отличные классы путем изменения метаклассов.

Удачи

4
ответ дан 3 December 2019 в 15:06
поделиться

Начиная с Groovy 1.6, вы можете применить миксин во время компиляции к классу с помощью аннотации

@Mixin(ImagesMixin)
class Person {
}

Или вы можете применить миксин во время выполнения следующим образом:

def myMixin = ImagesMixin
Person.mixin myMixin

Последний подход более динамичен, поскольку класс для миксина может быть определен во время выполнения. Дополнительная информация о примесах Groovy доступна здесь .

По моему опыту, многие методы метапрограммирования классов предметной области просто не работают. Я точно не знаю почему, но подозреваю, что это связано с тем, что эти классы уже очень сильно метапрограммированы средой выполнения Grails. В общем, мой подход

  • Попробуйте метапрограммирование на POGO в консоли Groovy
  • Если это сработает, попробуйте его на не доменном классе в консоли Grails
  • Если это сработает, попробуйте это в доменном классе в консоли Grails. Если это не работает, то это должно быть потому, что это класс предметной области (а не проблема с синтаксисом). На этом этапе рекомендуется попытаться найти другой способ достижения цели. Если это невозможно, тогда используйте комбинацию списка рассылки Grails и / или Stackoverflow и / или исходного кода Grails, чтобы попытаться заставить метапрограммирование работать.
12
ответ дан 3 December 2019 в 15:06
поделиться