【问题标题】:Best way to pass data back to Server using Knockout.js and Viewmodel使用 Knockout.js 和 Viewmodel 将数据传回服务器的最佳方式
【发布时间】:2013-05-08 19:52:14
【问题描述】:

我们有一个现有的 ViewModel,它有一堆属性,但也有枚举列表,以便填充视图中的下拉列表。

我注意到,当您使用 Knockout.js 并尝试将 Json 信息发回时,当您调用时:

ko.toJSON(viewModel);

它在发回时转换模型的所有,包括枚举,在尝试发回服务器以保存数据时,这些是不必要的。

我建议只将数据包装在 a 中并进行发布,但是是否有一种干净、简单的方法可以使用 Knockout 仅回发数据值而无需枚举?做这个的最好方式是什么? ViewModel 是否应该包含枚举或者是糟糕的设计?

【问题讨论】:

  • @Posthuma:请将其作为答案发布,以便 OP 可以接受。
  • @ChrisPratt 对此感到抱歉。

标签: asp.net-mvc knockout.js


【解决方案1】:

查看我对类似问题的回答:https://stackoverflow.com/a/14629775/91189

是的,您的视图模型应该包含视图所需的所有数据、枚举等。您发布到服务器的数据不需要包含所有视图模型的数据。一种直接的方法是,当您准备好向服务器发送数据时,构建一个仅包含请求所需数据的模型。

稍有不同,更内置的方法是将模型作为属性公开在您的视图模型上,并将您的视图绑定到需要的地方。这样,模型就会预先构建好,随时可以提交。

【讨论】:

    【解决方案2】:

    一种可能性是像这样构造您的视图模型:

    var viewModel = {
        enum1: ko.observableArray([...]),
        enum2: ko.observableArray([...]),
        data: {
            ... // other properties you want to post to the server
        }
    };
    

    并且只回发data 属性:

    ko.toJSON(viewModel.data);
    

    如果您使用Underscore.js,另一种可能性是使用_.omit 函数:

    ko.toJSON(_.omit(viewModel, "enum1", "enum2"));
    

    【讨论】:

    • 感谢@Cyanfish,我喜欢数据包装器,相当干净。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2014-01-27
    • 2012-08-30
    • 2013-10-11
    相关资源
    最近更新 更多