Я очень новичок в javascript, и я изучаю библиотеку knockooutjs, чтобы начать использовать ее в своем приложении. Я прописал пространство имен и viewmodel с некоторыми методами. Все работает как ожидается, пока я не вызову OnTemplateChange. Затем методы addIp и removeIp больше не работают.Методы Javascript из области
Я предрек пространство имен в отдельном файле:
var omega = omega || {};
Это код для моего ViewModel в другом файле. Я получаю данные Json от контроллера FranchiseData, и я использую плагин отображения для создания видимых свойств 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 больше не работают. Я думаю, что у меня проблема с областью действия, и повторное сопоставление неверно.
Если я попытаться объявить методы модели представления franchiseInfo как это:
omega.franchiseInfo = {
Ips: ko.observableArray([])
};
ИПС массив не определен внутри $.getJSON("FranchiseData", function (data)
сферы.
Любая помощь будет принята с благодарностью. Я очень зациклен на этом. Если что-то неясно, я дам дальнейшие объяснения. Спасибо.