Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
Javascript 如果布尔值的绑定计算不正确,则将其剔除_Javascript_Mvvm_Knockout.js_Knockout 2.0 - Fatal编程技术网

Javascript 如果布尔值的绑定计算不正确,则将其剔除

Javascript 如果布尔值的绑定计算不正确,则将其剔除,javascript,mvvm,knockout.js,knockout-2.0,Javascript,Mvvm,Knockout.js,Knockout 2.0,我的视图中有以下内容,使用span显示只读视图,使用输入显示编辑视图 <span data-bind="{ ifnot:IsEditing, text:SystemName }"></span> <input type="text" id="SystemName" data-bind="{ if:IsEditing, value:SystemName }" /> 我正在通过JQuery加载值,使用以下方法创建可观察模型: $.ajax({ type:

我的视图中有以下内容,使用span显示只读视图,使用输入显示编辑视图

<span data-bind="{ ifnot:IsEditing, text:SystemName }"></span>
<input type="text" id="SystemName" data-bind="{ if:IsEditing, value:SystemName }" />
我正在通过JQuery加载值,使用以下方法创建可观察模型:

$.ajax({
    type: "get",
    url: "..",
    success: function (d) {
        var pList = [];

        for (var p = 0, plen = d.Data.length; p < plen; p++) {
            var proj = d.Data[p];
            var systems = proj.Systems;
            var sList = [];

            proj = ko.mapping.fromJS(proj);

            for (var s = 0, slen = systems.length; s < slen; s++) {
                sList.push(ko.mapping.fromJS(systems[s]));
            }

            proj.Systems = ko.observableArray(sList);

            pList.push(proj);
        }

        window["model"].projects(pList);
    },
    error: function (e) {
        debugger;
        alert("An error occurred");
    }
});
$.ajax({
键入:“获取”,
网址:“…”,
成功:功能(d){
var-pList=[];
对于(var p=0,plen=d.Data.length;p

加载时,无论何时加载模型并计算此表达式,都会显示两个元素,而不是显示跨度并隐藏输入。当我将其更改为可见绑定时,仅显示范围。当IsEditing的计算结果为false时,为什么输入显示为if绑定?

如果您的
IsEditing
是可观察的,则
if
绑定应该正确地计算它

但是,
if
绑定应该应用于“类似容器”的元素,例如可以有子元素的元素

这篇文章有点让人困惑,并谈到了包含的标记:

但是,if绑定在物理上添加或删除DOM中包含的标记

由于
输入
不能有子元素,因此
if
无法从
输入
中删除任何内容。您需要将
输入
包装到
div
中,并在那里应用
if
,或者您可以使用无容器绑定语法:

<!-- ko if: IsEditing -->
    <input type="text" id="SystemName" data-bind="{ value: SystemName }" />
<!-- /ko -->

演示

<!-- ko if: IsEditing -->
    <input type="text" id="SystemName" data-bind="{ value: SystemName }" />
<!-- /ko -->