首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止基因敲除元素被复制

如何防止基因敲除元素被复制
EN

Stack Overflow用户
提问于 2014-02-26 17:51:42
回答 1查看 68关注 0票数 0

我是一个完全的新手,淘汰赛,并面临以下问题。

以下是我的淘汰赛对象

代码语言:javascript
复制
    var modelEmployee = {
    EmpRec: null
    };

    var viewModel = {
    lookupCollection:  ko.observableArray(),
    selectedItem: ko.observable(),
    EditedItem: ko.observable()
    };

在单击编辑链接时调用以下方法。我将数组的当前行复制到EditedItem,也复制到对象modelEmployee。

代码语言:javascript
复制
    viewModel.EditItem = function (item) {
    viewModel.EditedItem(item);
    modelEmployee.EmpRec = viewModel.EditedItem;
    }

如果用户取消了编辑,那么我希望将行从modelEmployee复制回我的数组

代码语言:javascript
复制
    viewModel.Cancel = function () {
    viewModel.EditedItem = modelEmployee.EmpRec;
    }

每当用户更改输入控件值时,都会更新所有对象中的控件值。modelEmployee不被设置为可观察的,但仍在进行更新。

我查看了许多论坛,但没有找到满意的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 13:56:54

因此,为了参数起见,您有一个要复制的employee record对象,该对象如下所示:

代码语言:javascript
复制
function EmployeeRecord(firstName, lastName, emplNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.number = emplNumber;
    this.someNestedObject = {
        foo: bar
    };
}

要进行深度复制,您需要创建一个新对象并复制每个字段。如果字段本身就是对象,则需要在副本中创建另一个新对象,并从该对象复制每个字段。类似于:

代码语言:javascript
复制
 var myCopy = new EmployeeRecord(source.firstName, source.lastName, source.number);
 myCopy.someNestedObject = {
     foo: source.foo
 };

对于具有大量字段的大型对象来说,这可能会变得有些乏味,因此一种稍微懒散的方法是(Ab)使用JSON.stringifyJSON.parse将对象序列化并反序列化为字符串,然后再返回:

代码语言:javascript
复制
var myCopy = JSON.parse(JSON.stringify(source));

因此,在您的情况下--如果只需要将对象保留为备份以便稍后进行还原,则可以这样做:

代码语言:javascript
复制
viewModel.EditItem = function (item) {
    viewModel.EditedItem(item);
    modelEmployee.EmpRec = JSON.stringify(viewModel.EditedItem());     // note: if you really need EmpRec to be an object, just JSON.parse it back again
}

当你恢复它时:

代码语言:javascript
复制
viewModel.Cancel = function () {
    viewModel.EditedItem(JSON.parse(modelEmployee.EmpRec));     // note: don't parse here if you parsed it when you saved it.
}

还请注意,JSON技巧不会复制函数。因此,如果对象中有函数,则需要手动复制它们(如果需要的话)。这是Knockout的一个重要警告,因为可观察实际上是函数,所以如果对象具有可观测性,序列化/反序列化技巧可能对您无效。

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

https://stackoverflow.com/questions/22049315

复制
相关文章

相似问题

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