0

私はjavascriptに非常に慣れておらず、アプリケーションで使用を開始するためにknockooutjsライブラリを研究しています。いくつかのメソッドで名前空間とビューモデルを宣言しました。OnTemplateChangeを呼び出すまで、すべてが期待どおりに機能しています。その後、addIpメソッドとremoveIpメソッドは機能しなくなります。

別のファイルで名前空間を宣言しました:

var omega = omega || {};

これは、別のファイルにある私のビューモデルのコードです。FranchiseDataコントローラーからJsonデータを取得しており、マッピングプラグインを使用してビューモデルの監視可能なプロパティを作成しています。

$(function () {
    omega.franchiseInfo = {}

    $.getJSON("FranchiseData", function (data) {
        //using the mapping plugin
        omega.franchiseInfo = ko.mapping.fromJS(data);
        //declare an observable array for some custom logic to handle when json data is received from the server
        omega.franchiseInfo.Ips = ko.observableArray([]);

        if (data.ServerIps.length === data.ServerPorts.length) {
            for (var i = 0; i < data.ServerIps.length; i++) {
                omega.franchiseInfo.Ips.push({ ip: ko.observable(data.ServerIps[i]), port: ko.observable(data.ServerPorts[i]) });
            }
        }
        ko.applyBindings(omega.franchiseInfo);
    });

   onTemplateChange = function (value) {
    var template = $("#networks :selected").val();
    $.getJSON("FranchiseData", { network: template }, function (data) {
        omega.franchiseInfo = ko.mapping.fromJS(data);
        omega.franchiseInfo.Ips = ko.observableArray([]);         
}

save = function () {
    $.ajax({
        url: "/Home/Save",
        type: "POST",
        //data: ko.toJSON({ folderName: FolderName }),
        data: ko.toJSON(this),
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        success: function (result) { alert("result") }
    });
}

addIp = function () {
    if (omega.franchiseInfo.Ips().length < 10) {
        omega.franchiseInfo.Ips.push({ ip: ko.observable(), port: ko.observable() });
    }

}

removeIp = function () {
    if (omega.franchiseInfo.Ips().length > 1) {
        omega.franchiseInfo.Ips.pop();
    }
}
)}

onTemplateChangeメソッドが呼び出されると、ページの読み込み時に最初のJson呼び出しから監視可能なメソッドを使用できないため、マッピングを再度実行しています。さらに、addIpとremoveIpは機能しなくなりました。スコープに問題があり、マッピングを2回行うのは間違っていると思います。

このようにfranchiseInfoビューモデルのメソッドを宣言しようとすると、次のようになります。

omega.franchiseInfo = {
        Ips: ko.observableArray([])
    }; 

Ips配列は$.getJSON("FranchiseData", function (data)スコープ内で未定義です。

どんな助けでも大歓迎です。私はこれで非常に立ち往生しています。不明な点がある場合は、さらに説明します。ありがとうございました。

4

1 に答える 1

0

$.getJSON( の後、私は }) または }); のように終わると思います。

また、すでに omega.franchiseInfo.Ips を observableArray として宣言しています

では、この omega.franchiseInfo.Ips([]) のように空にしてみませんか?

于 2012-04-28T18:40:32.683 に答える