Javascript 如何正确使用KnockoutJS可见绑定?
我有一个关于KnockoutJS和可见绑定的快速(希望很简单)问题。我只是不能让它为下面的代码工作。它所要做的就是在“signedIn”为false时显示一个表单,一旦表单提交,表单就会消失,并显示“You is signed as(username)”Javascript 如何正确使用KnockoutJS可见绑定?,javascript,jquery,html,knockout.js,data-binding,Javascript,Jquery,Html,Knockout.js,Data Binding,我有一个关于KnockoutJS和可见绑定的快速(希望很简单)问题。我只是不能让它为下面的代码工作。它所要做的就是在“signedIn”为false时显示一个表单,一旦表单提交,表单就会消失,并显示“You is signed as(username)” 目前,我的所有可见绑定似乎都不起作用,因为它总是显示表单,并且总是显示“You is signed as”文本。我觉得我错过了一些显而易见的东西,但我希望一双新鲜的眼睛能帮我找到它。如果有帮助的话,我使用的是Visual Studio 2013
目前,我的所有可见绑定似乎都不起作用,因为它总是显示表单,并且总是显示“You is signed as”文本。我觉得我错过了一些显而易见的东西,但我希望一双新鲜的眼睛能帮我找到它。如果有帮助的话,我使用的是Visual Studio 2013。对于敲除的可观察对象,如果直接绑定到可观察对象(如
数据绑定),则不必使用()
调用可观察函数=“可见:签名在
。但是,一旦您在绑定中对可观察到的对象执行了一些操作,比如否定它,或者如果您使用了相等检查,那么您就需要调用可观察到的函数,在否定它或比较它之前先读取值
因此,在您的代码中,您需要调用可观察函数,如下所示:
data-bind="visible: !signedIn()
有鉴于此,我认为最好的做法是总是调用可观察函数来避免这样的错误
不要使用jquery来获取username的值,而是使用Knockout绑定来实现这一点
由于您使用的是敲除绑定,因此无需使用onsubmit
<form class="pad-bottom" data-bind="visible: !signedIn(), submit: signIn">
<div class="form-group">
<label for="username">Sign In</label>
<input data-bind="value: username" class="form-control" type="text" name="username" id="username" placeholder="Enter your userame" />
</div>
<button type="submit" class="btn btn-primary">Sign In</button>
<br />
</form>
可见:!signedIn
将始终返回false
,因为signedIn
是一个可观察的函数。您最好使用visible:!signedIn()
。此外,无需同时使用submit
绑定处理程序和本机onSubmit
。感谢您提供的解决方案,这一点非常有效。我对signedIn vs signedIn()有点困惑。考虑到这是必要的,我们使用!signedIn()用于显示表单,为什么我们只使用signedIn来显示“You is signed in”div?因此,当您仅使用可观察值时,不必使用函数()
。一旦使用该值对该值执行其他操作,就需要使用函数()
。这就是为什么您可以使用data bind=“signedIn”
或data bind=“signedIn()”
但不能使用data bind=“!signedIn”
,而必须使用data bind=“!signedIn()”
。
data-bind="visible: !signedIn()
<form class="pad-bottom" data-bind="visible: !signedIn(), submit: signIn">
<div class="form-group">
<label for="username">Sign In</label>
<input data-bind="value: username" class="form-control" type="text" name="username" id="username" placeholder="Enter your userame" />
</div>
<button type="submit" class="btn btn-primary">Sign In</button>
<br />
</form>
var vm = {
username: ko.observable(),
signedIn: ko.observable(false),
signIn: function () {
vm.signedIn(true);
}
};