1

下面的简化代码。我有另一个构建 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 标签中获得更新的值,但我无法在单击登录按钮时更改效果。

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

谢谢!

布莱恩

4

3 回答 3

7

You assign value to the observable in wrong way. Each obserbable is a function so you should call it using () modify your changeValue function to the following:

self.changeValue = function(){
    console.log("changed!");
    self.successOrFailureSw("new value!");
}
于 2013-04-26T21:13:52.700 回答
2

You should set the value like this:

self.successOrFailureSw('new value!');

successOrFailureSw is not a string. That's why you need to set it in the same fashion that you did earlier in your code.

于 2013-04-26T21:12:18.200 回答
1

Try this : self.successOrFailureSw("new value!")

于 2013-04-26T21:12:30.167 回答