首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我是否过度使用了Knockout映射插件,总是使用它来创建视图模型?

我是否过度使用了Knockout映射插件,总是使用它来创建视图模型?
EN

Stack Overflow用户
提问于 2011-09-21 00:03:22
回答 3查看 14.9K关注 0票数 56

我仍然在学习Knockout的正确用法,并且我发现自己在设置视图模型时很快就不再键入ko.observable,而只是定义一个对象文字,并通过映射插件传递它,如下所示

代码语言:javascript
复制
var viewModel = ko.mapping.fromJS(data);

或者至少像这样将我的所有数据填充到viewModel上的一个属性中

代码语言:javascript
复制
var viewModel = { 
    ... events etc ... , 
    "data": ko.mapping.fromJS(data)
}

老实说,我这么做的主要原因是为了避免重复输入ko.observableko.observableArray。我只是想弄清楚这是不是一种好的方法,以及将特定的var x = ko.observable()声明一起丢弃是否有任何缺点。另外,我是在加载的时候做这些事情的,而不是响应任何ajax调用等,据我所知,映射插件就是为此而设计的。

在您使用knockout的工作中,您是否仍然手动逐个声明可观察对象,还是使用我使用的mapping.fromJS方法?像这样频繁使用映射插件有什么特别的缺点吗?

编辑:

具体示例

In this article,史蒂夫通过以下方式设置他的viewModel

代码语言:javascript
复制
var initialData = [ { ... } , { ... } ]; // json from the serializer
var viewModel = {
    gifts : ko.observableArray(initialData)
};

通常,我也会在这种情况下使用ko.mapping.fromJS,特别是为了确保数组中的对象也被转换为可观察对象。看看他的所作所为,我的方法看起来有点夸张,并增加了一些不必要的开销。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-23 01:29:09

我给你的建议和我刚刚在https://stackoverflow.com/questions/7499133/mapping-deeply-hierarchical-objects-to-custom-classes-using-knockout-mapping-plug.回答的问题是一样的

您使用映射插件的理由是合理的,我也是这样做的。为什么要键入更多的代码呢?

在我使用knockout的经验中(总共4个月),我发现我手动做的越少,让knockout例程做他们自己的事情,我的应用程序似乎运行得越好。我的建议是先尝试最简单的方法。如果它不能满足你的需求,看看简单的方法是如何做它的“事情”的,并确定必须做出哪些改变来满足你的需求。

票数 22
EN

Stack Overflow用户

发布于 2012-06-22 15:37:36

艾伦,我最近在Knockout.js上的学习经历和你的相似。我们使用来自服务器的深层次对象图,并且我定义了显式的、可实例化的视图模型函数,这些函数保留了它的基本结构。

一开始,我将每个属性显式定义为相关视图模型上的一个可观察对象,但很快就失去了控制。此外,切换到使用映射插件的一个主要原因是,我们必须频繁地将图的Ajax post返回到服务器,在服务器上将其与持久化版本合并,然后在服务器上进行验证,以便可以更改大量属性和修改集合,并返回一个新的实例作为Ajax结果,其中它必须与客户端表示重新合并。这变得非常困难,映射插件通过允许指定标识符来解析添加/删除/更新,并将更新的图形重新映射到原始图形上,从而提供了很大的帮助。

它还通过使用子视图模型的"create“选项来帮助创建原始图形。在每个视图模型构造器中,我接收到对父视图模型的引用以及用于构造子视图模型的数据,然后创建进一步的映射选项,以便从传入的子视图数据创建孙子视图。

正如我最近在this question中详细描述的那样,我最近发现的唯一(轻微)缺点是,在执行ko.mapping.toJSON时,它不会挂钩到您可能在视图模型的原型上定义的任何toJSON覆盖,以便从序列化中排除属性。我已经能够通过在取消映射中指定忽略选项来解决这个问题,正如Ryan Niemeyer在那篇文章中所建议的那样。

所以总而言之,我肯定会坚持使用映射插件。Knockout.js规则。

票数 4
EN

Stack Overflow用户

发布于 2012-04-24 18:40:02

一个更简单但完整帮助的附加组件可以是knockout-data-projections

目前,它不能处理js到视图模型的映射,但它能很好地处理视图模型到JS的映射。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7488208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档