Javascript-是否有可能淘汰赛更新’initialdata’对象?

这是我要对剔除js进行简化的示例:

<!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>

这段代码的目的是让敲除js更新derp中的值,而不是ViewModel内部的副本.

有没有一种方法可以通过剔除轻松完成此任务,还是我在错误的树上吠叫?

编辑上下文:

这是从更大的应用程序中剔除的.我的意图是使用剔除来显示和编辑大型,毛茸茸的javascript对象的属性.这些对象由用户动态实例化,并可随意在它们之间切换.

在我发现敲除之前,我是手动创建的DOM元素来显示和编辑每个杂乱而繁琐的对象.我对使用C#中的WPF通过MVVM拥有一些经验,并且会更倾向于使用该方法.我对剔除的最初了解是这样做,而不是意识到ViewModel复制了ko.observable *捕获的值. ViewModel仍然对我有用,因为它允许我有条件地公开并简化对我要编辑的成员的访问.

解决方法:

我确实喜欢使用Save方法的@Etch响应.这很有帮助.
但是,如果您想自动化这样的事情,那么我将对可观察对象进行订阅.

也许这不是一种更清洁的方法.如果我能够通过引用传递变量,那将更加高兴.

我更喜欢在可观察变量周围使用一些包装器以减少输入:

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/

希望这可以帮助.

上一篇:ASP.NET Core MVC中的viewmodel


下一篇:c#-从View中的ViewModel迭代ICollection