VBScript для каждой проблемы

Я не понимаю, как сделать цикл for-each для массива объектов. В настоящее время мои методы вызывают ошибки одним из двух способов. Либо цикл for выполняется и сталкивается с проблемами, потому что считает, что переменные класса не определены, либо сталкивается с проблемой, что тип объекта является недопустимым присвоением.

Вот класс, который я определил:

Class url_Link
     Public title, link
     Public Default Function Init(newTitle, newLink)
         title = newTitle
         link = newLink
         Set Init = Me
     End Function
End Class

Для справки, ошибки, которые я получаю:

Ошибка выполнения Microsoft VBScript '800a01f5'
Недопустимое назначение: 'url_Link'
строка 674

используя этот фрагмент кода:

<% for each x in systemSettingsArray%> 
<tr>
<td class='nograph'><A href='<%x.link%>'><%x.title%></a></td>
</tr>
<%next%> 

и когда я меняю url_Link на x, я получаю эту ошибку:

Неверный вызов процедуры или аргумент "ссылка"

Код, который создает объекты и заполняет массив:

Dim systemSettingsArray(1)
Dim link
Dim arrayCounter
arrayCounter = 0

Set systemSettingsArray(arrayCounter) = (New url_Link)("Account Administration", "Maintenance/Account_Admin.asp")
arrayCounter = arrayCounter + 1
Set systemSettingsArray(arrayCounter) = (New url_Link)("Time Approval", "Maintenance/system_Time_Approval.asp")

person Marshall Tigerus    schedule 26.07.2013    source источник
comment
Я также получаю недопустимый вызов процедуры или ошибку аргумента, если я изменю это на a для i=0 на UBound(systemSettingsArray) и изменю вызовы на systemSettingsArray(i).link   -  person Marshall Tigerus    schedule 26.07.2013
comment
как вы заполняете systemSettingsArray?   -  person Ekkehard.Horner    schedule 26.07.2013
comment
добавлен код для создания объектов и заполнения массива.   -  person Marshall Tigerus    schedule 26.07.2013
comment
спасибо за код; согласно моим тестам, это «работает», пока вы избегаете ошибки, на которую указал Ансгар, - используя имя класса в качестве имени переменной.   -  person Ekkehard.Horner    schedule 26.07.2013
comment
Я заставил его работать, за исключением того, что теперь он ничего не отображает вместо кода ошибки. Любые мысли, почему это будет делать это   -  person Marshall Tigerus    schedule 27.07.2013
comment
Некоторые заметки по тестированию для ясности. Внутри цикла for я получаю сообщение об ошибке недопустимого вызова процедуры, но используя практически тот же код вне цикла for, он будет отображаться правильно. Это очень сбивает с толку   -  person Marshall Tigerus    schedule 27.07.2013
comment
Позвольте мне немного лучше сформулировать то, что я только что сказал. Помещение вызова переменной вне тегов html позволяет ему работать нормально (я сделал response.write(systemSettingsArray(i).title) и response.write(systemSettingsArray(i).link), и оба работают нормально, когда он находится в HTML, который становится странным)   -  person Marshall Tigerus    schedule 27.07.2013
comment
Оказывается, проблема в том, что мне не хватает знака равенства. Теги asp должны быть ‹%= %›, а не ‹% %›.   -  person Marshall Tigerus    schedule 27.07.2013


Ответы (1)


Вы не можете сделать url_link именем класса и именем переменной одновременно. Кроме того, я нигде не вижу, чтобы вы инициализировали объекты url_link. Экземпляр пользовательского класса должен быть создан следующим образом:

Set linkobj = New url_link

или вот так, когда у вас есть метод, который возвращает ссылку на сам объект (в вашем случае Init):

Set linkobj = (New url_link).Init("foo", "bar")

Пометка метода как Default позволяет вам опустить явный вызов метода, поэтому вы можете написать приведенное выше как

Set linkobj = (New url_link)("foo", "bar")
person Ansgar Wiechers    schedule 26.07.2013
comment
Я просто не включил его в указанный код. Я добавлю это в код. - person Marshall Tigerus; 26.07.2013
comment
Вы по-прежнему не можете использовать одно и то же имя для класса и переменной цикла даже после инициализации systemSetingsArray. Пожалуйста, обновите свой вопрос, указав код, в котором вы заменили url_link на x. - person Ansgar Wiechers; 26.07.2013