0

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

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

ko.toJSON(viewModel);

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

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

4

2 回答 2

2

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

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

一种稍微不同的、更内置的方法是将模型公开为视图模型上的属性,并将视图绑定到需要的位置。这样,模型是预先构建好的,可以随时提交。

于 2013-05-09T00:49:51.280 回答
1

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

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"));
于 2013-05-09T00:56:07.240 回答