在使用MVVM进行Web开发时,我一直试图找到一些关于如何处理应用程序范围元素的好资料。我正在使用knockoutjs。
在应用程序范围内,我的意思是网站导航等元素。也许每个页面都有一个登录框,搜索框,页脚等。
这些应该进入单独的视图模型吗?或者您应该从包含这些的基本视图模型派生每个页面的视图模型?或者这些属性是否应该完全放在视图模型之外?
提前致谢。
答案 0 :(得分:1)
考虑按照对待业务组件的方式处理所有支持组件(菜单,页脚等)。另外,我建议每个UI组件都有单独的视图模型,而不管UI组件的类型如何。这使您的组件高度松散耦合。
例如,菜单可能具有自己的视图模型(不是任何全局视图模型的一部分)。现在,您可以使用PubSub库来实现发布者/订阅通知,以便在不同的UI组件(视图模型)之间进行松散耦合的通信,您的业务组件可以根据事件请求显示/隐藏自己。
但是专门用于实现菜单组件,我建议使用可以响应URL更改的路由器库(URL的#标签部分)。然后,当用户在主菜单(简单锚标记)上导航时,您可以简单地更改URL,并且路由器库将激活/停用您的组件。这将允许您添加书签并使用浏览器历史记录按钮。
查看http://boilerplatejs.org这是大规模JavaScript开发的参考架构。它已经在它的示例应用程序上实现了所有这些。它使用UrlController根据URL更改激活/停用组件,其中DomController用于静态地将组件放置在DOM本身上(例如,用于菜单,页脚,标题)。它对大多数示例UI组件使用knockoutjs。
免责声明:我是BoilerplateJS的创始人