0

我对 javascript 非常陌生,我正在研究 knockooutjs 库以开始在我的应用程序中使用它。我已经用一些方法声明了一个命名空间和视图模型。在我调用 OnTemplateChange 之前,一切都按预期工作。然后 addIp 和 removeIp 方法不再起作用。

我在一个单独的文件中声明了一个命名空间:

var omega = omega || {};

这是我的视图模型在另一个文件中的代码。我正在从 FranchiseData 控制器获取 Json 数据,并且正在使用映射插件来创建 viewmodel 可观察属性。

$(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 不再起作用。我认为我的范围有问题,两次映射是错误的。

如果我尝试像这样声明特许经营信息视图模型的方法:

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 回答