【发布时间】:2012-03-01 07:03:12
【问题描述】:
这是我尝试用 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 中的副本。
有没有办法通过淘汰赛轻松完成此任务,还是我找错了树?
编辑上下文:
这是从一个更大的应用程序中挑选出来的。我的意图是使用敲除来显示和编辑大型、毛茸茸的 javascript 对象的属性。这些对象由用户动态实例化,可以随意切换。
在我发现淘汰之前,我是手动创建 DOM 元素来做每个对象的显示和编辑,这很混乱和麻烦。我有一些通过 C# 中的 WPF 使用 MVVM 的经验,并且更喜欢使用这种方法。我对淘汰赛的最初理解是它会这样做,但没有意识到 ViewModel 复制了ko.observable* 捕获的值。 ViewModel 仍然对我有用,因为它允许我有条件地公开和简化对我想要编辑的成员的访问。
【问题讨论】:
-
我只是好奇为什么你会尝试使用 knockoutjs 而不想使用该模型。我的意思是你可以只使用普通的 javascript 来修改原始的 derp ob,但我认为我不完全理解你为什么要尝试解决 ko.js。也许我需要更多关于您要完成的工作的背景信息。
-
当然,我将编辑问题以添加一些上下文。
标签: javascript data-binding mvvm viewmodel knockout.js