2010-05-07 49 views
0

我目前正在重构我的webplayer,以便我们能够更轻松地在我们的其他互联网广播电台上运行它。这些播放器之间的大部分设置都非常相似,但有些需要有不同的UI插件/其他插件。如何设计应用程序为模块化/支持插件

目前在Web播放我做这样的事在它的init():

_this.ui =新UI();

_this.ui.playlist = new Playlist();

_this.ui.channelDropdown = new ChannelDropdown();

_this.ui.timecode = ne Timecode();

etc etc

这工作正常,但阻止我在运行时需要这些对象。我想要做的是能够根据车站需求添加这些功能。基本上我的问题是,我需要在这里添加某种“addPlugin()”功能吗?如果我这样做,是否需要经常从WebPlayer对象中检查该插件是否存在,然后再尝试使用它?喜欢...

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

我很抱歉,如果其中一些可能不明确......真的试图让我的头包裹所有这一切。我觉得我更接近,但我仍然坚持。任何意见,我应该如何继续这一点将不胜感激。

由于提前,

回答

0

你需要,你希望别人能过的工作的应用程序中暴露的某些功能。 IE:在您的用户界面和播放器等主要组件上公开获取{} set {}访问器。您公开的更多功能越多,插件将能够修改您的功能的重要部分。

假设你有一个UI.header,并且头部包含定义头部如何显示UI的属性。因此,您将header.backgroundImage作为公共字符串公开,将header.Text作为公共字符串公开,并将header.height作为公共int来公开。现在有人设计一个插件可以改变你的标题值,并让它看起来并说出他们想要的。

这都是关于你希望人们能够根据你所暴露的内容改变你的播放器。

0

您可以为您的插件定义JavaScript类,将它们作为依赖关系加载到网页播放器,并在运行时根据需要在RequireJS AMD的帮助下实例化它们。

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

在运行时在需要时加载webplayer.js文件并实例化Web播放器。

查看BoilerplateJS这是JavaScript产品开发的参考体系结构。关注事件处理,创建自包含组件,处理它们之间的交互,决定何时创建/显示/隐藏UI组件等问题,以便快速开始开发。