淘汰赛:将可观察对象克隆到另一个变量中并将其变为不可观察对象
Knockout: Clone observable object into another variable and turn it not observable
我找不到这个特定问题的任何答案。假设我有一个可观察对象,我想将它克隆到另一个完全独立的变量中,并使该变量不可观察。有人可以帮我找到这个问题的解决方案吗?
我试过这样的解决方案:
var notObservableVar = observableVar();
但是新变量似乎不是独立的,因为我的后续代码似乎使用 observableVar 而不是新的独立变量。
更新:
正如@Brother Woodrow 在评论中所说的那样,Knockout 提供了一个 API 方法 .toJS()
来完成这项工作:
var notObservable = ko.toJS(observableVar)
旧答案(如果你的可观察对象有子可观察对象,不要使用这个):
要创建一个对象的浅拷贝,你可以使用Object.prototype.assign()
:
var notObservableVar = Object.assign({}, observableVar());
另一种选择是使用对象解构:
var notObservableVar = {...observableVar()};
请注意,这两种方法都需要 ES6 支持——无论是在您的构建堆栈 (Babel) 中,还是在浏览器中,这应该是 运行。另请注意,要使对象解构与 Babel 6 一起使用,你需要一个插件(因为当 Babel 6 是当前版本时,对象解构仍然是一个提案)。
如果 ES6 不适合你,你可以使用字符串化然后解析对象的旧方法:
var notObservableVar = JSON.parse(JSON.stringify(observableVar()));
我找不到这个特定问题的任何答案。假设我有一个可观察对象,我想将它克隆到另一个完全独立的变量中,并使该变量不可观察。有人可以帮我找到这个问题的解决方案吗?
我试过这样的解决方案:
var notObservableVar = observableVar();
但是新变量似乎不是独立的,因为我的后续代码似乎使用 observableVar 而不是新的独立变量。
更新:
正如@Brother Woodrow 在评论中所说的那样,Knockout 提供了一个 API 方法 .toJS()
来完成这项工作:
var notObservable = ko.toJS(observableVar)
旧答案(如果你的可观察对象有子可观察对象,不要使用这个):
要创建一个对象的浅拷贝,你可以使用Object.prototype.assign()
:
var notObservableVar = Object.assign({}, observableVar());
另一种选择是使用对象解构:
var notObservableVar = {...observableVar()};
请注意,这两种方法都需要 ES6 支持——无论是在您的构建堆栈 (Babel) 中,还是在浏览器中,这应该是 运行。另请注意,要使对象解构与 Babel 6 一起使用,你需要一个插件(因为当 Babel 6 是当前版本时,对象解构仍然是一个提案)。
如果 ES6 不适合你,你可以使用字符串化然后解析对象的旧方法:
var notObservableVar = JSON.parse(JSON.stringify(observableVar()));