3

ビューには次のようなものがあります。スパンを使用して読み取り専用ビューを表示し、入力を使用して編集ビューを表示します。

<span data-bind="{ ifnot:IsEditing, text:SystemName }"></span>
<input type="text" id="SystemName" data-bind="{ if:IsEditing, value:SystemName }" />

IsEditing オブザーバブルが false に評価されています。次の階層を持つ JSON を返しています。

Project
   .
   .
   Systems (collection)
     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");
    }
});

読み込み時に、モデルが読み込まれ、この式が評価されるたびに、スパンを表示して入力を非表示にする代わりに、両方の要素が常に表示されます。これを可視バインディングに変更すると、スパンのみが表示されます。IsEditing が false と評価されているときに、入力が if バインディングで表示されるのはなぜですか?

4

1 に答える 1