【问题标题】:Defining models on server side when using MVVM with Knockout.js将 MVVM 与 Knockout.js 一起使用时在服务器端定义模型
【发布时间】:2023-04-06 00:42:02
【问题描述】:

我计划在客户端使用 knockout.js 和 MVVM 模式来实现单页应用程序。所以模型,视图模型将在客户端定义。我对我们必须如何在服务器端进行结构感到困惑。

  1. 现在,控制器会返回域模型本身吗?从域模型到 ViewModel 的所有映射是否只发生在客户端?

  2. 在我的解决方案中,域模型和视图模型之间存在很大差距。所以上述方法会导致大量数据不必要地返回到客户端。虽然看起来有点矫枉过正,但我​​正在考虑在服务器端重复 ViewModel 和 InputViewModel 定义(前者代表呈现的数据,后者代表要回发到控制器操作的数据),并且还有一个映射层(基于 automapper)来映射域模型到服务器端的 ViewModels。这有意义吗?还是有更好的方法?

【问题讨论】:

    标签: asp.net-mvc-3 mvvm knockout.js singlepage


    【解决方案1】:

    这正是我处理这个问题的方式。如果这是一个直接的 MVC 应用程序,您仍将创建视图模型。

    有时对于复杂的数据集,我可以看到使用类似 Knockback 的用例,它采用了主干.js 的丰富数据模型并将其与 knockout.js 相结合 http://kmalakoff.github.com/knockback/

    【讨论】:

      【解决方案2】:

      我建议您弄清楚您的视图模型实际需要哪些数据,然后让控制器构建一个包含该数据的服务器端视图模型,并将其以 JSON 格式发送到客户端。

      这样您就不会向客户端(或返回)发送不必要的数据,您仍然可以在服务器上完成大部分繁重的工作,并且淘汰视图模型可以完成它们的目的:呈现数据供视图使用。

      【讨论】:

      • 您已经描述了我在问题中描述的第 2 点。我对第 2 点方法的担忧是客户端以 vm 格式接收 json,并再次映射到客户端 javascript 上定义的 vm。这就是我所说的矫枉过正。有没有更好的方法来避免在客户端创建映射和对象?
      • Knockout Mapping 插件 (knockoutjs.com/documentation/plugins-mapping.html) 会根据 JSON 数据在客户端自动生成视图模型
      【解决方案3】:

      您在第 2 点中描述的实际上是我使用最多的解决方案,这对我来说很有意义: 我在服务器端使用 Automapper 在特定于 View 且仅包含 View 需要的数据的域模型和 ViewModel(.Net 对象)之间进行映射。 负责第一次加载 View 的 Controller Action 会将 View 数据绑定到 ViewModel 上,从而使页面快速初始化,无需进行 Ajax 调用。 在视图本身中,我创建了淘汰视图模型,通过 Json 编码有界的 ViewModel 分配任何初始值(如果需要)(例如,使用 Asp.Net MVC 我会做类似的事情

      var boundedViewModel = @Html.Raw(Json.Encode(Model));
      

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 1970-01-01
        相关资源
        最近更新 更多