Knockout.js 剔除可见绑定未得到重新评估
我对击倒可见绑定有点困惑。 我创建了一个示例来演示这个问题。 主要目的是在用户选择“其他”选项时显示一些div(其他详细信息)。 它不起作用了。 当“mySelection”字段更改时,可见项不会重新估价Knockout.js 剔除可见绑定未得到重新评估,knockout.js,knockout-2.0,Knockout.js,Knockout 2.0,我对击倒可见绑定有点困惑。 我创建了一个示例来演示这个问题。 主要目的是在用户选择“其他”选项时显示一些div(其他详细信息)。 它不起作用了。 当“mySelection”字段更改时,可见项不会重新估价 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /&
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Test</title>
<script src="Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/knockout-2.2.0.js" type="text/javascript"></script>
<script type="text/javascript">
function data()
{
this.mySelection = ko.observable('other');
this.isOtherSelected = ko.computed(function ()
{
return this.mySelection.peek() == 'other';
}, this);
}
var myData = new data();
$(document).ready(function ()
{
$('#selections').change(function ()
{
myData.mySelection = $(this).val();
});
dataBind();
});
function dataBind()
{
ko.applyBindings(myData);
}
</script>
</head>
<body>
<div>
<select id="selections" data-bind="value: mySelection">
<option value='one'>One</option>
<option value='two'>Two</option>
<option value='three'>Three</option>
<option value='other'>Other</option>
</select>
</div>
<div id="otherDetails" data-bind="visible: isOtherSelected">
<span>Some controls and stuff...</span>
</div>
</body>
试验
函数数据()
{
this.mySelection=ko.observable(“其他”);
this.isOtherSelected=ko.computed(函数()
{
返回此.mySelection.peek()=='other';
},这个);
}
var myData=新数据();
$(文档).ready(函数()
{
$(“#选择”)。更改(函数()
{
myData.mySelection=$(this.val();
});
数据绑定();
});
函数数据绑定()
{
ko.应用绑定(myData);
}
一个
两个
三
其他
一些控件和东西。。。
提前谢谢你,亚龙。只需删除peek()
:返回此.mySelection()=='other'代码>
peek函数获取可观测值,但不订阅更改时的外部计算可观测值。因此,您的绑定不会被重新评估。您应该以不同的方式处理可观察对象。每个可观察对象都是一个函数,因此要获得值,必须调用它:
return this.mySelection() == 'other';
如果要为其赋值,应将值传递给此函数:
myData.mySelection($(this).val());
这是工作小提琴:
另外,您不需要在那里使用jQuery更改处理程序。KO将自动更新可观测值。以下是重构代码: