Первые шаги и шишки :)

Статус
Закрыто для дальнейших ответов.

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Сдуру на старости лет начал изучать JavaScript :) Взял книжку Михаила Борисова "Скрипты в InDesign...". На 38 стр. пример:
Код:
// Создание простого диалогового окна.
// Создаем контейнер для всех элементов диалога

var myDialog = dialogs . add () ;

//Добавляем первый и единственный ряд таблицы
with (myDialog.dialogColumns.add())  {
 
   // Начинаем добавлять элементы управления
   // Выводим текст названия элемента управления
   staticTexts.add( { staticLabel : " Введите ширину текстового фрейма: " } ) ;
 
   // Создаем элемент для ввода первого значения
   var myWidth = realEditBoxes . add ( { editValue : 1 } ) ;
   // Еще один элемент управления
   staticTexts . add ( { staticLabel : " Введите высоту текстового фрейма : " } ) ;
 
   // Создаем элемент для ввода второго значения :
   var myHeight = realEditBoxes . add ( { editValue : 1 } ) ;
   }
// Выводим окно на экран
var myResult = myDialog . show () ;

// Считывание значений

myWidthValue = myDialog . myWidth
myHeightValue = myDialog . myHeight

// Освобождение памяти от ставшего ненужным диалога
myDialog . destroy () ;
Набираю в ESTK , запускаю. Останавливается на первой строчке кода и выдает сообщение: dialogs is undefined .
Подскажите плз, что не так и как лечить?
Спасибо!
 
Последнее редактирование модератором:
Не ожидал, если честно, что так много всего в этой книге не так. Или, возможно, для версии CS2 всё нормально, а для версий выше надо так:
Код:
// Создание простого диалогового окна.
// Создаем контейнер для всех элементов диалога

var myDialog = app . dialogs . add () ; //Добавить app.

//Добавляем первый и единственный ряд таблицы
with (myDialog.dialogColumns.add())  {
   // Начинаем добавлять элементы управления
   // Выводим текст названия элемента управления
   staticTexts.add( { staticLabel : " Введите ширину текстового фрейма: " } ) ;
   // Создаем элемент для ввода первого значения
   var myWidth = realEditboxes.add ( { editValue : 1 } ) ; //boxes — "b", а не "B"
   // Еще один элемент управления
   staticTexts.add ( { staticLabel : " Введите высоту текстового фрейма : " } ) ;
   // Создаем элемент для ввода второго значения :
   var myHeight = realEditboxes . add ( { editValue : 1 } ) ; // То же самое
   }
// Выводим окно на экран
var myResult = myDialog . show () ;

// Считывание значений

myWidthValue = myWidth.editValue; //И здесь всё не так
myHeightValue = myHeight.editValue;

// Освобождение памяти от ставшего ненужным диалога
myDialog . destroy () ;
 
Не ожидал, если честно, что так много всего в этой книге не так. Или, возможно, для версии CS2 всё нормально, а для версий выше надо так:
......
myWidthValue = myWidth.editValue; //И здесь всё не так

А как нужно? И что должно получиться в результате? Я думал должен появиться текстовый фрейм но он не появляется, или я опять ничего не понимаю?
 
Последнее редактирование модератором:
Я имел ввиду, что всё не так было. Надо так, как я написал.
И что должно получиться в результате?
Из этого кода, по большому счёту, ничего, кроме того, что из диалога передаются данные в переменные myWidthValue и myHeightValue. А что дальше с ними будет происходить — надо дописывать.
 
Спасибо огромное! А может быть подскажете какую-нибудь книжку без ошибок, а то,если на каждый пример я буду столько времени убивать то и до конца жизни не осилю даже азов :( И ладно бы еще только свое время убивал, а то и Ваше.
 
Упорно продолжая свое безнадежное занятие изучения JavaScript по книжке Михаила Борисова "Скрипты в InDesign...". На 41 стр. в примере: "Считывание значений из окна диалога"
Код:
// Если не нажата кнопка Cancel
if (myDisplay)
{
    var myParagraphAlignment ,  myString ,  myPointSize ,  myVerticlalJustification ;
   
    // По очереди считываем значения из диалога :
    // Первое поле - текст сообщения
    myString = myTextEditField . editContents
   
    // Второе поле
    myPointSaize = myPointSaizeField . editValue ;
   
    // Обрабатываем раскрывающийся список
    switch ( myVerticalJustificationMenu . selectedIndex )
    {
        with ( VerticalJustification )
        {
            case " 0 " : myVerticalJustification = topAlign
            case " 1 " : myVerticalJustification = centerAlign
            case " 2 " : myVerticalJustification = bottomAlign
            }
        }
    }

// Обрабатываем переключатели
switch ( myRadioButtonGroup . selectedButton )
{
    with ( Justification )
    {
        case "0" : myHorizontalJustification = leftAlign
        case "1" : myHorizontalJustification = centerAlign
        case "2" : myHorizontalJustification = rightAlign
        }
    }
}

//  Освобождаем память
myDialog . destroy () ;

// Выполняем необходимые действия на основе значений,
// полученных из окна диалога
function doSomething () {
...
}

в 19 строке получаю сообщение об ошибке: Illegal use reserved word "case"
И вот сижу, чешу репу, что-же мне дальше делать? Помогите, плз!!!
 
Вам бы сперва матчасть на стандарт джавы подучить, а потом за адобовский javascript браться.
1) Кто вам сказал, что блок with можно внутри блока switch располагать и ожидать что компилятор сквозь него case углядит? Делайте блок with сверху
2) Не нужно быть программистом, чтобы не видеть, что у вас в одном месте условия свича " 0 " а на другом "0" Реально это один символ безо всяких пробелов, причем, судя по контексту, даже не символ, а индекс, то есть, целое число, как Олег ниже написал. Такая невнимательность очень чревата.
3) Ну, и до кучи, лишние пробелы между точками, отсутствие ; в конце строк - масса косяков. Это что, очередной пример из чудо-книги? 'fp'
 
Последнее редактирование:
в 19 строке получаю сообщение об ошибке: Illegal use reserved word "case"
И вот сижу, чешу репу, что-же мне дальше делать? Помогите, плз!!!
Это реальный код из книги или вы его так набрали?
Слишком много явных и очевидных ошибок. Полагаю, что Михаил Борисов все же проверял работоспособность кода.
Код
Код:
// Обрабатываем раскрывающийся список
    switch ( myVerticalJustificationMenu . selectedIndex )
    {
        with ( VerticalJustification )
        {
            case " 0 " : myVerticalJustification = topAlign
            case " 1 " : myVerticalJustification = centerAlign
            case " 2 " : myVerticalJustification = bottomAlign
            }
        }
    }

должен быть примерно такого вида:

Код:
// Обрабатываем раскрывающийся список
    with ( VerticalJustification )
    {
        switch ( myVerticalJustificationMenu.selectedIndex )
        {
            case 0 : myVerticalJustification = topAlign;
            break;
            case 1 : myVerticalJustification = centerAlign;
            break;
            case 2 : myVerticalJustification = bottomAlign;
            break;
            }
        }
    }

иначе он принципиально работать не будет.
 
Это реальный код из книги или вы его так набрали?
Слишком много явных и очевидных ошибок. Полагаю, что Михаил Борисов все же проверял работоспособность кода.

Реальный, из книги. Судя по первому коду (в начале темы) не очень-то он проверял то, что пошло в печать книги.
 
Это не книга — это ад. До сих лежит пылится на полке. Я уже как-то высказывала своё мнение о ней.
 
Да, опечаток в коде там море. Но сама книга составлена толково (офф. руководство не в счет, для начинающих оно бесполезно), к тому же со статьями Бутрина - это все что есть на русском языке.
 
В виду дефицита информации на русском языке, возможно, книга и имеет право быть. В конце концов, автор постарался охватить по чуть-чуть все направления. И единственный, кто попробовал это сделать.
Но когда я её пыталась читать — она пошла во вред и отбила желание. На тот момент я была не то что начинающей, а вообще ничего не понимала даже в самых примитивных основах программирования.
Для таких случаев она не подходит. Нет знакомства с синтаксисом языков (что-то дано в конце, но очень бегло). И поэтому нет понимания, откуда берутся эти конструкции, что они делают, почему именно так.
Меня всё ещё удивляет старт книги с диалоговых окон. На мой взгляд это не основополагающий раздел в скриптинге, но при этом довольно специфический для знакомства с языком.
Ну и опечатки это отдельная песня. Опять же. Это сейчас я вижу отсутствие точек с запятыми и проблемы с фигурными скобками. А тогда, при неработающем коде начиналась гадалочка: или я что-то не так сделала, или в новой версии это иначе работает. На один листинг тратилась масса времени, пока к наивной девушке не пришло понимание того, что в книге могут быть опечатки.

Не по теме:
Достала с полки книжку, нашла в ней закладку на 73 странице, там я и сломалась.
 
В виду дефицита информации на русском языке, возможно, книга и имеет право быть....На один листинг тратилась масса времени, пока к наивной девушке не пришло понимание того, что в книге могут быть опечатки.
Если первое преткновение вызвало у меня досаду, то после второго я увидел в этом промысел Божий :) Ведь если все гладко - набрал код, запустил, сработало, хорошо, поехали дальше - в голове мало что отложится. А когда наткнулся на error , почесал репу, воззвал к профи, они ткнули тебя носом куды надь - вот тут-то что-то и отложится :)
 
С Божьей помощью буду грызть этот манускрипт дальше. Не обессудьте на меня уважаемые профи если и впредь я буду приводить к Вам пациентов (кривые коды) из этого т.н. "руководства" :)
 
Последнее редактирование модератором:
Следующий пример (источник тот же, стр.43) и опять преткновения:
Код:
// Создание диалогового окна StepAndRepeat
// Создаем контейнер для всех элементов диалога
var myDialog = app.dialogs.add() ;
myDialog.Name = "StepAndRepeat" ;
На этой строке отладчик ругается: Объект не может поддерживать свойство или метод "Name"
Убираем строку :
Код:
var myDialog = app.dialogs.add() ;
//myDialog.Name = "StepAndRepeat" ;
// Левая  колонка
myLabelsColumn1 = myDialog.dialogColumns.add() ;
with (myLabelsColumn1) {staticTexts.add({staticLabel : "Repeat Count:"}) ;
    // Пробельный элемент
    // Исключительно для отделения одной группы параметров от другой
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Horizontal Offset:"}) ;
    staticTexts.add({staticLabel : "Vertical Offset:"}) ;
   
    // Снова пробельный элемент
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Rotation:"}) ;
    staticTexts.add({staticLabel : "Skew:"}) ;
   
    // Пробельный элемент
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Fill Tint:"}) ;
    staticTexts.add({staticLabel : "Stroke Tint:"}) ;
    }
// Колонка для значений параметров из первой колонки
myControlsColumn1 = myDialog.dialogColumns.add() ;
with (myControlsColumn1) {
    myRepeatField = integerEditboxes.add({editValue:2});
   
    // Пробельный элемент
    staticTexts.add() ;
    myXOffsetField = measurementEditboxes.add({editValue:0});
    myYOffsetField = measurementEditboxes.add({editValue:0});
   
    // Пробельный элемент
    staticTexts.add() ;
    myRotationField = angleEditboxes.add({editValue:0});
    mySkewField = angleEditboxes.add({editValue:0});
   
    // Пробельный элемент
    staticTexts.add() ;
    myFillTintField = realEditboxes.add({editValue:0});
    myStrokeTintField = realEditboxes.add({editValue:0});
    }
// Очередная колонка для значений
myLabelsColumn2 = myDialog.dialogColumns.add() ;
with (myLabelsColumn2) {
    staticTexts.add() ;   
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Sroke Weight:"}) ;
    staticTexts.add({staticLabel : "Opacity:"}) ;
   
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Horizontal Scale:"}) ;
    staticTexts.add({staticLabel : "Vertical Scale:"}) ;
       
    staticTexts.add() ;   
    staticTexts.add() ;
    staticTexts.add({staticLabel : "Proxy:"}) ;
    }
// Колонка со значениями
myControlsColumn2 = myDialog.dialogColumns.add() ;
with (myControlsColumn2) {
    staticTexts.add() ;   
    staticTexts.add() ;
    mySrokeWeightField = measurementEditboxes.add();
    myOpacityField = realEditboxes.add({editValue:0});
   
    staticTexts.add() ;
    myXScaleField = realEditboxes.add({editValue:0});
    myYScaleField = realEditboxes.add({editValue:0});
    staticTexts.add() ;   
    staticTexts.add() ;
    myProxyMenu = dropdowns.add({stringList:myProxyList,selectedIndex : 0}) ;
    }

И опять ругается в последней строке - "Нет определения myProxyList "
Как исправить первую и вторую ошибки?
Спасибо!
 
Статус
Закрыто для дальнейших ответов.