как автоматически установить флажки, чтобы отразить настройки при открытии стека

Стек, который я сделал, должен отображать категории текстовых строк. Я могу установить категории на карточке «Выбрать категории», и настройки будут сохранены во внешнем текстовом файле. При повторном открытии стека Категории правильно отображаются в форме, но на карточке, где производится выбор, установленные флажки не соответствуют отображаемым Категории.

Код на уровне стека, который не работает для вышеуказанного:

global gAllLines,gSelectedCategories

on openStack
   put empty into gAllLines
   set the itemDelimiter to tab
   put fld "alllines" of cd "settingsandfiles" into gAllLines

   put empty into gSelectedCategories
   set the itemDelimiter to tab  -- do I have to set the itemDelimiter here again even though it was set above?
   set the defaultFolder to specialFolderPath("Documents")
   put URL ("file:./myAppsData.txt") into gSelectedCategories

   if "s" is among the items of gSelectedCategories then set the hilite of btn "Short" of cd "select_categories" to true
   if "m" is among the items of gSelectedCategories then set the hilite of btn "Medium" of cd "select_categories" to true
   if "l" is among the items of gSelectedCategories then set the hilite of btn "Long" of cd "select_categories" to true
end openStack  

Код кнопки «Сохранить» на карточке «Выбрать категории»:

    global gAllLines,gSelectedCategories,gMyCategories

on mouseUp
   put empty into gSelectedCategories
   set the itemDelimiter to tab
   if the hilite of btn "Short" is true then put "s" & tab after gSelectedCategories
   if the hilite of btn "Medium" is true then put "m" & tab after gSelectedCategories
   if the hilite of btn "Long" is true then put "l" & tab after gSelectedCategories

   put gSelectedCategories into URL ("file:./myAppsData.txt")

   go back
end mouseUp

Вот ссылка на стек:

https://dl.dropboxusercontent.com/u/99863601/Data%20grid%20Form_save%20and%20retrieve%20settings.zip

или здесь:
http://filecloud.io/lk06h3py

или здесь:
http://www.divshare.com/download/24928436-897

в

Как исправить эту проблему?

Заранее спасибо.

керам

=======================

Я исправил это сейчас, изменив код на уровне стека:

        on openStack
       put empty into gAllLines
       set the itemDelimiter to tab
       put fld "alllines" of cd "settingsandfiles" into gAllLines

       put empty into gSelectedCategories
       put URL ("file:" & specialFolderPath("Documents") & "/myAppsData.txt") into gSelectedCategories
       if "s" is among the items of gSelectedCategories then set the hilite of btn "Short" of cd "select_categories" to true
       else set the hilite of btn "Short" of cd "select_categories" to false
       if "m" is among the items of gSelectedCategories then set the hilite of btn "Medium" of cd "select_categories" to true
       else set the hilite of btn "Medium" of cd "select_categories" to false
       if "l" is among the items of gSelectedCategories then set the hilite of btn "Long" of cd "select_categories" to true
       else set the hilite of btn "Long" of cd "select_categories" to false

    end openStack

керам


person mark    schedule 20.12.2013    source источник


Ответы (3)


Когда вы сохраняете данные, они разделяются табуляцией. Когда вы считываете данные, сценарий принимает разделитель по умолчанию, который является запятой. Если вы установите для itemDelimiter значение tab перед чтением значений, это должно сработать.

Неясно, разрешено ли пользователю выбирать несколько элементов или только один. Если это только один, вам вообще не нужно проверять элементы, в данных будет только один символ («s», «m» или «l».)

person Jacque    schedule 20.12.2013
comment
Спасибо, Жак. Я добавил второй itemDelimiter сейчас в скрипт стека. Нужно ли это делать, когда он уже был установлен один раз (см. выше)? Но в любом случае, когда я снова открываю стек, все 3 флажка устанавливаются, даже если я сохранил только один или два в текстовый файл данных. Да, пользователь должен иметь возможность выбрать 1, 2 или 3 категории. (Закачал модифицированную версию стека - все равно не работает должным образом). - person mark; 20.12.2013

Я только что протестировал ваш стек, и он работает для меня здесь (OSX9), вы делаете это на Mac или ПК? Мне интересно, может ли проблема быть в маршруте к текстовому файлу и стоит ли его добавлять

   set the defaultFolder to specialFolderPath("Documents")

к сценарию вашей кнопки «Сохранить».

Но на самом деле это звучит так, как будто вам просто нужно выполнить некоторую отладку и найти ответы на такие вопросы, как: создается ли текстовый файл там, где вы ожидаете? Содержит ли он то, что, по вашему мнению, должен? Ваши флажки, кажется, выделены по умолчанию, что произойдет, если вы снимите их и попробуете свою процедуру, они все еще будут отображаться как выделенные? и т.д. и т.п.

Дэйв Килрой

person Dave Kilroy    schedule 20.12.2013
comment
Спасибо Дэйв! Я делаю это на ПК, и текстовый файл был создан в ожидаемой папке «Документы», и настройки были сохранены там правильно. Теперь, когда я добавил строку, которую вы предложили, флажки по умолчанию не выделены, и они правильно сохраняют сохраненные настройки. Наконец-то работает нормально! - person mark; 20.12.2013
comment
На самом деле я сделал вышеприведенный комментарий слишком поспешно. Поиграв с ним еще несколько раз, он показывает, что он неверен. 3 флажка теперь всегда подсвечиваются при повторном открытии стека, даже если они не были выбраны, а также когда вообще не были установлены флажки. Так что проблема остается. - person mark; 20.12.2013
comment
Керам, хорошо, если ваш текстовый файл находится в нужном месте и содержит хороший контент, давайте поищем в другом месте. Попробуйте вставить ответ gSelectedCategories в ваш обработчик openStack, чтобы увидеть, что возвращается из текстового файла, если вы ничего не получите, значит, путь к файлу неверен или, возможно, вы неправильно набрали имя своей глобальной переменной. Если в диалоговом окне ответа отображаются правильные данные, значит, проблема «ниже по течению» — вставляйте «ответ» или «пут» в соответствующие части кода, пока не получите что-то, что не работает, затем сделайте резервную копию немного, и вы найдут вашу проблему! Удачи! - person Dave Kilroy; 20.12.2013
comment
На самом деле, Керам, я только заметил код для сохранения в текстовый файл в кнопке «Сохранить» скрипта — я не помню, чтобы видел «onCloseStack» или аналогичный обработчик, поэтому состояние ваших флажков не будет сохранено при выходе, когда вы упоминать выше, но только когда вы нажимаете кнопку «Сохранить» - person Dave Kilroy; 20.12.2013
comment
Да, ты прав. У меня он был в обоих местах, но убран из обработчика onCloseStack за ненадобностью — достаточно в кнопке Сохранить. Что касается вашего предыдущего предложения по отладке: я делал именно это - вставлял «ответ gSelectedCategories» после сохранения текстового файла и после его загрузки в переменную gSelectedCategories, и он показывает правильные категории, разделенные вкладками. Кроме того, сохраненный текстовый файл данных показывает правильные категории, разделенные табуляцией. Я буду продолжать экспериментировать, пытаясь найти ошибки. - person mark; 20.12.2013

Не удается получить доступ к вашему стеку. Поэтому я не могу знать, что такое переменные «s», «m» и «j», и правильно ли они вписываются в «элементы» данных, извлеченных из этого файла.

Вы знаете, что элементы — это куски текста, разделенные запятыми, верно? Похоже, форматирование неправильное, потому что команда для установки hilites этих кнопок кажется простой. Так что же содержит «s» и, что более важно, как формируется возвращаемый текст?

Крэйг Ньюман

person dunbarx    schedule 20.12.2013
comment
Извините, что ссылка на дропбокс у вас не работает. Добавил еще 2 ссылки для скачивания стека - см. выше. - person mark; 20.12.2013
comment
Добавлен код, показывающий, как s, m и l помещаются в переменную. - person mark; 20.12.2013