knockout.js observable没有更新

时间:2013-05-21 16:20:25

标签: javascript jquery html knockout.js observable

我有一个非常简单的html页面,其中包含一个viewmodel,如下所示。

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <script src='E:\Trials\ClientSide\MyTrials\knockout-2.2.1.js' type='text/javascript'></script>
    <script src='E:\Trials\ClientSide\MyTrials\jquery-2.0.0.js' type='text/javascript'></script>
    <title>Index</title>
    <script type="text/javascript">

        function PersonViewModel()
        {
            firstName = ko.observable("FirstN")
        };

        $(document).ready(function () {
            var person = new PersonViewModel();
            ko.applyBindings(person);
        });

    </script>
</head>
<body>
    <div>
        <h3>Details</h3>
        <p>First Name: <input data-bind="value:  firstName()" /></p>
        <p>First Name From span: <span data-bind="text: firstName()" ></span> </p>
    </div>
</body>
</html>

它非常简单和自我解释。脚本块包含一个视图模型,在doc ready函数上,绑定发生。而且html也很简单。一个输入和一个跨度绑定到可观察的相同属性firstName。 但痛苦是当我从输入中更改值时,跨度不会更新。我错过了什么? 问候 的Vivek

2 个答案:

答案 0 :(得分:7)

firstName()更改为firstName

<p>First Name: <input data-bind="value:  firstName" /></p>
<p>First Name From span: <span data-bind="text: firstName" ></span> </p>

答案 1 :(得分:4)

这里有两个问题。

  1. 正如Caludio所提到的,当您没有必要时,您将括号放在绑定中。请参阅他的答案,了解如何解决此问题。
  2. 您的PersonViewModel稍有不妥。你忘了放置这个。&#39;在firstName属性的前面。像这样修复它:

    function PersonViewModel()
    {
        this.firstName = ko.observable("FirstN");
    };