可观察值更新只会改变一个绑定元素,而不会改变另一个
Observable value update changes one bound element but not another
我的视图模型有一个属性,它的值更新一个数据绑定元素,但不更新另一个。
当signUpModel.fullNameActive
值通过blur
和focus
事件在input
上发生变化时:
<span data-bind="text: signUpModel.fullNameActive"></span>
已更新,但以下内容:
<p class="inputTip" data-bind='visible: signUpModel.fullNameActive'>
Enter your first and last name
</p>
不是。为什么呢?
同样,当我最初打开页面时,会显示非工作元素,然后隐藏,然后显示。好像已经改了三次了
var signUpModel = new SignUpModel();
$(document).ready(function () {
ko.applyBindings(signUpModel);
});
function SignUpModel() {
this.userID = ko.observable("");
this.userName = ko.observable("");
this.fullName = ko.observable("");
this.fullNameActive = ko.observable(false);
this.sex = ko.observable("");
this.dateOfBirth = ko.observable("");
this.emailAddress = ko.observable("");
this.profileImage = ko.observable("");
this.levelID = 1;
}
使用这个视图代码:
<div class="fieldContainer">
<span data-bind="text: signUpModel.fullNameActive"></span>
<input type="text" data-bind="event: {blur: function(){signUpModel.fullNameActive(true)}, focus: function(){signUpModel.fullNameActive(false)} }, value: signUpModel.fullName, valueUpdate: 'afterkeydown'" maxlength="40" id="inputFullName" />
<div class="inputHelp">
<p class="inputTip" data-bind='visible: signUpModel.fullNameActive'>
Enter your first and last name</p>
<p class="isRequired" data-bind='fadeVisible: signUpModel.fullName().length < 1 || signUpModel.fullName().replace(/'s/g,"") == ""'>
Gotta enter something</p>
<p class="isGood" data-bind='fadeVisible: signUpModel.fullName().length > 1 && signUpModel.fullName().replace(/'s/g,"") != ""'>
This is exciting <span id="personsName" data-bind="text: signUpModel.fullName"></span>
</p>
</div>
</div>
我怀疑闪烁与您正在使用的fadeVisible绑定有关。
像这样的东西将是一个简单的实现:
ko.bindingHandlers.fadeVisible = {
init: function(element, valueAccessor) {
$(element).toggle(ko.utils.unwrapObservable(valueAccessor()));
},
update: function(element, valueAccessor) {
ko.utils.unwrapObservable(valueAccessor()) ? $(element).fadeIn() : $(element).fadeOut();
}
试着调和你的小提琴:http://jsfiddle.net/rniemeyer/f3XMN/
两个元素似乎都是根据fullNameActive的值正确更新的。
相关文章:
- innerHTML赢得't改变元素
- 这是关于Jquery/JS的,如果我改变元素's HTML-我可以对它执行其他Jquery/JS操作吗
- 为什么硒会改变元素's href
- 如何通过jQuery点击另一个元素来改变元素的类
- 悬停在元素上改变元素,然后在悬停中包含该元素
- 在动画开始时改变元素高度(Angular)
- 如何改变元素"this"在jQuery
- 使用jQuery切换类和改变元素的大小
- 使用javascript使用2个标识符改变元素的宽度
- 点击改变元素位置
- 在不改变元素大小的情况下放大元素
- JQuery可拖动改变元素开始
- 改变元素的类
- 根据可滚动内容的样式改变元素样式
- jQuery offset()或position() -当元素靠近另一个元素时改变元素的属性
- 如何使用jquery每隔5秒改变元素的背景颜色
- jQuery .detach()不工作时,试图改变元素的位置沿DOM滚动
- 当我点击元素A时,我想改变元素B的文本
- 如何在JavaScript中编写hoverHandler来改变元素悬停时的颜色
- 使用jQuery改变元素顺序的最优方法