Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MVVM视图模型中处理应用程序范围的元素_Javascript_Mvvm_Knockout.js - Fatal编程技术网

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

Javascript 在MVVM视图模型中处理应用程序范围的元素,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我一直在努力寻找一些关于如何在使用MVVM进行web开发时处理应用程序范围的元素的好资料。我正在使用knockoutjs 我所说的应用程序范围是指像站点导航这样的元素。也许每个页面都有一个登录框、搜索框、页脚等 这些是否应该放在单独的视图模型中?或者您应该从包含这些内容的基本视图模型派生每个页面的视图模型吗?或者这些属性应该一起排除在视图模型之外 提前感谢。请考虑像对待业务组件那样对待所有支持组件(菜单、页脚等)。另外,我建议每个UI组件都有单独的视图模型,而不管UI组件的类型如何。这使得组件高

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

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

这些是否应该放在单独的视图模型中?或者您应该从包含这些内容的基本视图模型派生每个页面的视图模型吗?或者这些属性应该一起排除在视图模型之外


提前感谢。

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

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

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

看看哪个是大规模JavaScript开发的参考体系结构。它已在其示例应用程序上实现了上述所有功能。它使用UrlController根据URL更改激活/停用组件,其中as DomController用于将组件静态地放置在DOM本身上(例如,用于菜单、页脚、页眉)。它对大多数示例UI组件使用knockoutjs

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