【发布时间】:2015-05-05 17:45:29
【问题描述】:
我正在使用 Knockout 运行 ASP.net MVC4 应用程序。
我有一个发布我的淘汰赛表格的通用脚本。
我需要优化发送到服务器的数据,因为当我发布我的 Knockout ViewModel 时,包含所有项目的 SelectList 也会发布!
示例服务器视图模型:
Public Class FooViewModel
Public Property Bar As String
Public Property Products As List(Of SelectListItem)
End Class
将我的 Knockout ViewModel 转换为 JSON 的 JS 代码
var data = ko.toJSON(viewModel);
data 变量包含所有产品项目,并且不是很优化。
我找到了这段代码(有效):
viewModel.toJSON = function () {
var copy = ko.toJS(this);
// remove any unneeded properties
delete copy.Products;
return copy;
}
但我需要一个通用解决方案...!在这里,我看不到如何使其通用...
一个快速而肮脏的解决方案是在每个数组属性上添加一个后缀,例如“_NoPost”,然后循环并删除每个具有这个后缀的属性,但它闻起来......很糟糕:/
有什么想法吗?
【问题讨论】:
-
如果您只想传递产品数组而不是总 viewModel 数据,为什么不能像这样尝试
ko.toJSON(this,products)。 -
您好,感谢您的尝试。 1°)这是相反的,我不想要产品数组 2°)我想要一种通用的方式来做到这一点。算法语句看起来像“将数据发送到服务器,除了所有 SelectList”因为发布数据的脚本不知道他必须忽略哪些数组属性。我清楚还是应该在我的问题中添加一些细节?
-
“通用”是什么意思?你的意思是 Vanilla JS 而不是 Knockout?如果是这样,您实际上是在要求对 Knockout 映射插件或 Knockout
ko.toJS函数进行 vanilla JS 重写。此外,为什么不立即排除对ko.toJSON的调用中的属性,以便您可以从中检索干净的对象你的数据库(而不是在ko.toJS电话中)?? -
我的意思是“通用”:在属性上放置一个标志或其他东西以忽略它向服务器发布数据。而不是删除必须忽略的每个 viewModel 的每个属性。
标签: asp.net asp.net-mvc-4 knockout.js knockout-mapping-plugin