在MVVM视图模型中处理应用程序范围的元素



我一直在努力寻找一些关于在使用MVVM进行web开发时如何处理应用程序范围元素的好消息来源。我正在使用knockoutjs。

我所说的应用程序范围是指像网站导航这样的元素。也许每个页面都有一个登录框、搜索框、页脚等。

这些应该进入单独的视图模型吗?还是应该从包含这些内容的基本视图模型派生每个页面的视图模型?还是应该将这些属性一起排除在视图模型之外?

提前谢谢。

考虑像对待业务组件一样对待所有支持组件(菜单、页脚等)。此外,我建议无论UI组件的类型如何,每个UI组件都有单独的视图模型。这使得您的组件高度松散耦合。

例如,菜单可能具有自己的视图模型(而不是任何全局视图模型的一部分)。现在,您可以使用PubSub库来实现发布者/订阅通知,以便在不同的UI组件(视图模型)之间进行松散耦合的通信,您的业务组件可以根据事件请求显示/隐藏自己。

但特别是为了实现菜单组件,我建议使用一个可以响应URL更改的路由器库(URL的标签部分)。然后,当用户在主菜单上导航时,你可以简单地更改URL(简单的锚标记),你的组件将被路由器库激活/停用。这将允许您添加书签并使用浏览器历史记录按钮。

看看http://boilerplatejs.org这是大规模JavaScript开发的参考体系结构。它已经在它的示例应用程序上实现了以上所有内容。它使用UrlController根据URL更改激活/停用组件,其中DomController用于将组件静态放置在DOM本身上(例如,用于菜单、页脚、页眉)。它将knockoutjs用于大多数示例UI组件。

免责声明:我是BoilerplateJS 的创始人

最新更新