0

我目前正在重构我的网络播放器,以便我们能够更轻松地在其他互联网广播电台上运行它。这些播放器之间的大部分设置将非常相似,但是,有些需要具有不同的 UI 插件/其他插件。

目前在网络播放器中,我在它的 init() 中做了这样的事情:

_this.ui = 新 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);

如果其中一些可能不清楚,我深表歉意......真的试图让我的头脑围绕所有这些。我觉得我更近了,但我仍然卡住了。任何关于我应该如何进行的建议将不胜感激。

提前致谢,

4

2 回答 2

0

您需要在您的应用程序中公开您希望其他人能够使用的某些功能。IE:在 UI 和播放器等主要组件上公开 get{} set{} 访问器。您公开的功能越多,插件就能修改您功能的重要部分。

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

这完全取决于您希望人们能够根据您所暴露的内容改变您的播放器的程度。

于 2010-05-07T13:52:20.923 回答
0

您可以为您的插件定义 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 产品开发的参考架构。诸如事件处理、创建自包含组件、处理它们之间的交互、谁决定何时创建/显示/隐藏您的 UI 组件等问题都得到了处理,以便快速启动开发。

于 2012-09-06T06:48:32.953 回答