绑定对象作为默认值

时间:2012-11-09 12:04:20

标签: knockout.js

有时候我需要绑定对象。我喜欢那样。

var obj = {id: null, name: null}
var obs = ko.observable(obj);

然后当我在obs中更改某个值时,obj也会发生变化。就像那样:

obs().id = 1;
console.log(obj.id)

输出

Object { id=5, name=null }

预期吗?我使用obj保存编辑表单的原始值以检查更新的数据,并仅将编辑后的值更新到服务器。

1 个答案:

答案 0 :(得分:0)

这是预期的行为。您将obj的引用传递给obs可观察对象。如果您希望obj保留原始值,则应克隆它。

如果您使用的是jQuery,可以使用extend克隆对象:

var obj = {id: null, name: null}
var cloneOfObj  = jQuery.extend(true, {}, obj);
var obs = ko.observable(cloneOfObj);