2016-01-13 2 views
1

Добрый день,Поведение оператора странного выключателя

Я действительно изо всех сил стараюсь дать должный заголовок (описывающий проблему), поэтому, пожалуйста, простите меня.

Проблема:

У меня есть класс с двумя способами:

1 import FormPopulator = require("../util/FormPopulator"); 
2 
3 class UIX { 
4  
5  formPopulator: FormPopulator; 
6 
7  contructor() { 
8   this.formPopulator = new FormPopulator(); 
9  } 
10  
11 public setDefaultValues(defaultValues: DefaultValues) { 
12  for (var i = 0; i < SearchAllFormProperties.searchFormProperties.length; i++) { 
13   this.pushDataToUI(SearchAllFormProperties.searchFormProperties[i], defaultValues); 
14  } 
15  alert("End Of the loop."); 
16 } 
17 
18 public pushDataToUI(property: string, defaultValues: DefaultValues) { 
19  switch (property) { 
20   case "textField": 
21    (<HTMLInputElement> document.getElementById("textField")).value = ""; 
22    break; 
23   case "dropDown": 
24    this.formPopulator.populateTheDropBox("dropDown", defaultValues.listOfValues); 
25    alert("after populateTheDropBox"); 
26    break; 
27   default: 
28    alert("Property: " + property + " is not accepted."); 
29  } 
30  } 
31 } 

Теперь - setDefaultValues называется, но исполнение не попадает в линию 15 класса UIX, если я не прокомментирую строку 24 того же класса, то есть звонит, однако он получает строку 25 значение он вернулся из метода , но почему он не возвращается к setDefaultValues?

1 class FormPopulator { 
2  public populateTheDropBox(selectElementID: string, listOfElements: Array<any>) { 
3 
4   // Get the combo box 
5   var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID); 
6   // Reset the options 
7   selectElement.options.length = 0; 
8 
9   for (var i = 0; i < listOfElements.length; i++) { 
10  
11    var option = document.createElement("option"); 
12    option.value = ""+listOfElements[i].id; 
13    option.innerHTML = listOfElements[i].value; 
14  
15    selectElement.appendChild(option); 
16   } 
17  } 
18 } 

P.S. Если я закомментируйте петлю, начиная с линии 9 из класса FormPopulator - это вернуться к setDefaultValues и выполняет линию 15 класса UIx т.е. alert("End Of the loop.");

Я действительно изо всех сил, чтобы объяснить это поведение, и нет никаких исключений ,

+1

Это звучит как необработанное исключение. Если вы используете Chrome для отладки - убедитесь, что у вас есть «Пауза на выведенных исключениях», установленная в true. На всякий случай вы уже можете обрабатывать его где-то сверху в стеке вызовов. – Amid

+0

Единственное логическое объяснение, которое я могу найти, заключается в том, что как-то 'populateTheDropBox' увеличивает' SearchAllFormProperties.searchFormProperties.length' и заставляет цикл работать вечно ... –

+0

Aviad - Нет, я напечатал значение индекса - это правильно, и концы петли. – Sasha

ответ

0

, если я закомментируйте строки 24 из одного и того же класса, т.е. вызов populateTheDropBox, однако он попадает в линию 25 означает, что он вернулся из метода populateTheDropBox, но почему он не вернулся к setDefaultValues ​​

Based на ваш код вы вызываете pushDataToUI в цикле. Просто потому, что вы добираетесь до строки 25 alert("after populateTheDropBox");один раз не означает, что цикл завершен. Он может продолжать выполняться (и, вероятно, в какой-то момент имеет ошибку javascript, которая приводит к сбою стека вызовов), и вы никогда не сможете добраться до alert("End Of the loop.");.

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