我正在尝试实现基于 MVVM 的单页应用程序,目前正在使用框架 Knockout.js 来处理 MVVM 的视图模型/视图部分。不过我很困惑,因为我为实现 Knockout 而查看的每个示例都涉及将整个视图模型保存到数据库中。这些示例是否缺少“模型”步骤,其中视图模型与数据层模型同步,模型进行验证/服务器同步。
我想在单个页面上有多个不同的模板/视图,每个都有不同的视图模型。我发现 knockout.js 缺少的另一件事是在不同视图之间同步单个模型(不是视图模型)。我认为让每个视图共享一个巨大的视图模型是没有意义的,所以我认为每个视图都有自己的视图模型,但每个视图模型将与几个应用程序范围模型所需的字段同步每个视图。
我正在处理的页面获取一个巨大的模型(30 多个字段,多层父/子关系),我认为让我的所有视图模型与这个模型同步是有意义的。我研究了 Knockback.js(它结合了 knockout.js 和骨干网),但是我最终重写了大多数函数,例如 fetch、set、save,因为页面正在从 API 获取数据(我可以'不只是与服务器来回同步整个模型)所以我决定反对它。
我的应用程序的视觉示例:
(模型层) M | 米
(视图模型/视图层)VM-V | 虚拟机-V | 虚拟机-V | 虚拟机-V
另一个例子
一个示例模型是 User = {firstName: "first", lastName: "last", ... }
一个视图模型只需要名字,另一个视图模型只需要姓氏
ViewModelA={firstName: app.User.firstName()}
ViewModelB={firstName: app.User.lastName()}
这样做是为模型和视图模型更改定义发布/订阅系统的唯一方法吗?这甚至是好的/可维护的架构吗?我在这里错过了一个基本概念吗?欢迎所有建议。