Как разработать приложение для модульных / поддерживающих плагинов - PullRequest
0 голосов
/ 07 мая 2010

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

В настоящее время в веб-плеере я делаю что-то подобное в init ():

_this.ui = новый пользовательский интерфейс ();

_this.ui.playlist = new Playlist ();

_this.ui.channelDropdown = new ChannelDropdown ();

_this.ui.timecode = ne Timecode ();

и т. Д.

Это прекрасно работает, но это блокирует меня от необходимости этих объектов во время выполнения. То, что я хотел бы сделать, это иметь возможность добавлять те, которые основаны на потребностях станций. По сути, мой вопрос заключается в том, нужно ли мне добавить какую-то функциональность addPlugin () здесь? И если я сделаю это, нужно ли постоянно проверять по моему объекту WebPlayer, существует ли этот плагин, прежде чем он попытается его использовать? Как ...

if (_hasPlugin ('playlist')) this.plugins.playlist.add (track);

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

Заранее спасибо,

Lee

Ответы [ 2 ]

0 голосов
/ 06 сентября 2012

Вы можете определять классы JavaScript для своих плагинов, загружать их как зависимости в веб-плеер и создавать их экземпляры во время выполнения по мере необходимости с помощью RequireJS AMD.

//in your webplayer.js
define(['./ui','./playlist'],function(ui, playlist){
     var webPlayer = function(stationID){
     //initializing work
    }
    return webPlayer; 
});

Во время выполнения при необходимости загрузите файл webplayer.js и создайте экземпляр веб-плеера.

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

0 голосов
/ 07 мая 2010

В вашем приложении вам понадобится предоставить определенную функциональность, с которой вы хотите, чтобы другие могли работать.IE: обнародование get {} set {} аксессоров для основных компонентов, таких как ваш пользовательский интерфейс и ваш плеер.Чем больше функциональности вы выставите, тем больше плагинов сможет изменять важные части вашей функциональности.

Итак, допустим, у вас есть UI.header, а header содержит свойства, которые определяют, как заголовок отображает UI.Таким образом, вы представляете header.backgroundImage в качестве публичной строки, header.Text в качестве публичной строки и header.height в качестве публичного int.Теперь кто-то, проектирующий плагин, может изменить значения вашего заголовка и заставить его выглядеть и говорить то, что он хочет.

Все зависит от того, насколько вы хотите, чтобы люди могли изменять ваш плеер в зависимости от того, что вы выставляете.

...