2013-08-27 2 views
1

Я пытаюсь заполнить поле со списком псевдонимов формы, я могу заполнить его списком имен форм, но не могу заставить псевдонимы работать. У меня есть этот код в значениях в поле со спискомЗаполните поле Combo с формой Псевдонимы

var forms = database.getForms().iterator(); 
var tNames = new Array; 
var cnt = 0; 
while (forms.hasNext()){ 
    var form:NotesForm = forms.next(); 
    var temp = form.getAliases(); 
    if (temp != "" && temp != null) { 
     tNames[cnt++] = temp; 
    } 
} 
form.recycle(); 
return tNames.sort(); 

Если я нарушу его и вернуть темп значения в первый раз через я получить правильное значение Aliase, однако, если я отпущу его запустить все так, как это дает непредвиденную ошибку при загрузке страницы. Я пробовал несколько разных способов создания массива tNames, но ни один из них не работает.

+0

Вы должны использовать шаблон Нэвин обрисовывает в общих чертах ниже. Но причина, по которой вы указали код, вызывает ошибку, потому что ваш вызов 'form.recycle()' находится за пределами вашего цикла while. Навен правильно переместил это внутри цикла, и вам тоже нужно. :) –

+1

P.S. Прекратите использование 'new Array()': http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-9AN5ZK –

ответ

7

Форма может иметь несколько псевдонимов. Таким образом, оператор form.getAliases() возвращает вектор. Когда вы запускаете цикл только один раз, переменная tNames содержит только одно значение класса java.util.Vector, которое принимает комбинированное поле. Но когда вы позволяете ему пробегать все значения, переменная tNames становится и массив java.util.Vector, что недопустимо для комбинированного поля.

Попробуйте следующий код:

var forms = database.getForms().iterator(); 
var tNames = new Array(); 
var cnt = 0; 
while (forms.hasNext()){ 
    var form:NotesForm = forms.next(); 
    var temp = form.getAliases().toArray(); 
    tNames = tNames.concat(temp); 
    form.recycle(); 
} 
return tNames; 
+0

Как и в большинстве случаев, ответ обычно прост. Так что спасибо большое. –