敲除.js并点击更改值

时间:2013-04-26 21:08:28

标签: javascript knockout.js

以下简化代码。我有另外的构建w / ajax调用,我知道正在工作b / c我可以看到它们命中服务器。但我无法获得将更改呈现回UI的内容。

html的:

<div id="LoginPage" data-title="LoginPage" data-role="page" data-theme="a">
<div data-role="content" class="minimalPaddingContent">
    <div class="divDivider"></div>
    <h3>REACH Energy Audit Login</h3>

    <input type="text" placeholder="User Name" id="userName" data-bind="value: successOrFailureSw"/>
    <input type="password" placeholder="Password"  id="password"/>

    <a href="#" data-role="button" id="LoginSubmit" style="width:150px;" class="centeredButton" data-bind="click: changeValue">Sign In</a>
  <span data-bind="text: successOrFailureSw"></span>

</div>

的.js:

var LoginViewModel = function (commonName, successOrFailureSw) {
    var self = this;

    self.commonName = ko.observable(commonName);
    self.successOrFailureSw = ko.observable(successOrFailureSw);



    self.changeValue = function(){
        console.log("changed!");
        self.successOrFailureSw = "new value!";
    }

};

ko.applyBindings(new LoginViewModel("", "super fail"));

我很确定我的映射在.html b / c上是正确的,原始值将呈现为超级失败,如果我更改了映射到“successOrFailureSw”的文本框中的值,我将获得更新后的值span标签,但我无法在点击时更改登录按钮的效果。

我知道我错过了这么简单的,所以我提前道歉。

谢谢!

布赖恩

3 个答案:

答案 0 :(得分:6)

您以错误的方式为observable赋值。每个可观察对象都是一个函数,因此您应该使用()调用它来将changeValue函数修改为以下内容:

self.changeValue = function(){
    console.log("changed!");
    self.successOrFailureSw("new value!");
}

答案 1 :(得分:2)

您应该像这样设置值:

self.successOrFailureSw('new value!');

successOrFailureSw不是字符串。这就是为什么你需要以与你之前在代码中所做的相同的方式设置它。

答案 2 :(得分:1)

试试这个:     self.successOrFailureSw(“新值!”)