Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 剔除可见绑定未得到重新评估_Knockout.js_Knockout 2.0 - Fatal编程技术网

Knockout.js 剔除可见绑定未得到重新评估

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" /&

我对击倒可见绑定有点困惑。 我创建了一个示例来演示这个问题。 主要目的是在用户选择“其他”选项时显示一些div(其他详细信息)。 它不起作用了。 当“mySelection”字段更改时,可见项不会重新估价

<!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将自动更新可观测值。以下是重构代码: