2009-03-28 4 views
0

У меня есть три компонента. Окно формы управления (на заказ), основной класс и класс плагина.Динамический ответ на события

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

Каков наилучший способ создать что-то подобное?

Edit:

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

например: плагин может выбрать только для добавления текста. Он отправляет событие, и основной класс должен вызывать соответствующие методы. Но другой плагин может выбрать добавление настраиваемого элемента управления, поэтому основному классу нужно вызывать разные методы.

Как я могу описать ту часть, где основной класс действует по-разному на конкретном событии.

(кстати, не используйте слово плагин слишком буквально. Сейчас это просто классы в проекте).

ответ

0

Звучит довольно просто. Я бы предложил использовать интерфейс для вашего класса плагина.

interface IPlugin 
{ 
    event EventHandler PluginUpdateEvent; 
} 

Либо ваш класс формы или ваш главный класс будет содержать коллекцию или массив плагинов, независимо от требования были, и обнаружить их, как вам нужно - с помощью отражения, инъекции конструктора, конфигурационный файл, что бы ни лучше ,

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

0

использовать модель-представление-контроль шаблон проектирования и ваши взгляды проходят callBackFunctions вы хотите, чтобы работать. увидеть это:

-- the code is in LUA 
-- **** I create an answerBox, and when user tap this answerBox I want to print->"test" 

local answerBox = require "view.answerBox" 
local test = answerBox:new() 
test.init("text for your answerBox", "1", function() print "answerBox was tapped by the user" end) 

и в классе answerBox я получаю функцию и вызвать его, когда объект сливают:

-- constructor 
function new(self, message, id, callBackFunction, obj) 
    function callBackFunction(event)    
     callBackFunction(event) 
    end 
    obj.answerBox:addEventListener("tap", callBackFunction) 
end 

Будьте осторожны при использовании этой структуры. в этой структуре класс answerBox находится в представлении, а функция CallBackFunction находится в контроллере. Вы можете даже использовать некоторую логику из своей модели вместо function() print "test" end

надеюсь, что это поможет. ;)

Смежные вопросы