这是我尝试用 knockoutjs 做的一个非常简化的例子:
<!DOCTYPE HTML>
<html>
<head>
<title>test</title>
<script type="text/javascript" src="https://github.com/downloads/SteveSanderson/knockout/knockout-2.0.0.debug.js"></script>
<script type="text/javascript">
var derp = { "foo": 1, "bar": 2 };
window.onload = function() { go(); }
function go()
{
var ViewModel = function(foobar)
{
this.foo = ko.observable(foobar.foo);
this.bar = ko.observable(foobar.bar);
}
ko.applyBindings(new ViewModel(derp));
}
</script>
</head>
<body>
<input data-bind="value: foo"/>
<input data-bind="value: bar"/>
<button onclick="go();">Go</button>
</body>
</html>
此代码的目的是让 knockoutjs 更新 derp
中的值,而不是 ViewModel 中的副本。
有没有一种方法可以通过 knockout 轻松实现这一目标,还是我找错了树?
根据上下文编辑:
这是从一个更大的应用程序中挑选出来的。我的目的是使用 knockout 来显示和编辑一个大的、毛茸茸的 javascript 对象的属性。这些对象由用户动态实例化,可以随意切换。
在我发现found knockout之前,我都是手动创建DOM元素来做每个对象的显示和编辑,很杂乱和繁琐。我在 C# 中通过 WPF 使用 MVVM 有一些经验,并且更愿意使用这种方法。我对 knockout 的最初理解是它会这样做,没有意识到 ViewModel 复制了 ko.observable
* 捕获的值。 ViewModel 对我仍然有用,因为它允许我有条件地公开和简化对我想要编辑的成员的访问。
最佳答案
我确实喜欢使用 Save
方法的 @Etch 响应。这很有帮助。
但是如果你想自动化这样的事情,那么我会选择 subscribe
on observables。
也许这不是一种更简洁的方法。如果我能够通过引用传递变量会更开心。
我更喜欢在 observables 周围使用一些包装器来减少输入:
var returnFireObservable = function(variable, property) {
var obs = ko.observable(variable[property]);
obs.subscribe(function(newValue) {
variable[property] = newValue;
});
return obs;
};
并以这种方式在代码中使用:
var ViewModel = function(foobar) {
this.foo = returnFireObservable (foobar, "foo");
this.bar = returnFireObservable (foobar, "bar");
};
ko.applyBindings(new ViewModel(derp));
小演示 http://jsfiddle.net/AlfeG/eQ9Zf/2/
希望这对您有所帮助。
关于javascript - 是否可以让 knockoutjs 更新 'initialdata' 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200193/