2012-04-27 3 views
0

Я очень новичок в 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) сферы.

Любая помощь будет принята с благодарностью. Я очень зациклен на этом. Если что-то неясно, я дам дальнейшие объяснения. Спасибо.

ответ

0

После $ .getJSON (я ожидал бы окончания как}) или});

Кроме того, вы уже объявили omega.franchiseInfo.Ips как observableArray

Так почему Разве вы не сделать его пустым, как этого omega.franchiseInfo.Ips ([])

Смежные вопросы