json
и js
- два разных типа ответа, и они определяются как различные типы MIME в Rails
Mime::Type.register "text/javascript", :js, %w( application/javascript application/x-javascript )
Mime::Type.register "application/json", :json, %w( text/x-json application/jsonrequest )
Даже если Json можно считать подмножеством JavaScript, не все отклики JavaScript на самом деле являются откликами Json.
Вы можете ответить Json и Js в одном действии.
Например, у вас может быть действие, которое отвечает Json на вызов API и JavaScript (возможно, с использованием RJS) на внутренний вызов Ajax.
-121--1410669-
Проблема в том, что arrStartMembers представляет собой массив последовательностей, в то время как tb. Текст - это просто последовательность. Нужно назначить тб. Текст к индексу в массиве. Для этого используйте свойство indexer , которое выглядит как число в квадратных скобках сразу после имени переменной массива. Число в скобках является отсчитываемым от 0 индексом в массиве, в котором требуется задать значение.
arrTeamMembers[0] += tb.Text;
-121--4121210-
Рекомендации по проектированию уже не очень выполняются, потому что Swing работает на множестве различных платформ. Сан написал несколько давно, и никогда не менял их, так что я бы сказал, прочитал, если вы думаете, что это поможет. Вот некоторые практические знания о разработке свинга.
- Никогда не используйте GridBagLayout. Захват таблицы Макет. Это существенно упрощает компоновку для пользователя Swing UI. GridBagLayout - дьявол.
- Не переставайте встраивать компоненты, чтобы получить правильную компоновку (например, embedded AxLayout и т.д.). Как это сделать, см. пункт 1. На экране имеются проблемы с производительностью, связанные с компонентами.
- Разделите программу по линиям MVC. Swing имеет разделение View и Model, но в больших программах View (т.е. подклассы Swing Component) превращается в psuedo View/Controller, что только усложняет повторное использование и обслуживание. Это быстро превращается в код спагетти. Сломайте привычку и создайте класс Controller, который НЕ расширяет Swing. То же самое касается модели (без качелей). Контроллер создает экземпляры высокоуровневых классов представлений и сам проводит прослушивание представлений.
- Упрощение всплывающих диалоговых окон с использованием только простых панелей. Не подкласс JDialog. Создайте класс диалогового окна многократного использования, содержащий панель, которую можно использовать, например, JOpityPane. Панели не будут привязаны только к диалоговым окнам и могут использоваться повторно. Очень легко, когда ты работаешь в этом пути.
- Избегайте использования actionlistener/command. Это старый мусор и не очень многоразовый. Используйте AbstractAction (классы anon являются вашим выбором. У меня нет проблем с ними). AbstractAction инкапсулирует текст, значок, мнемонику, акселераторы, многократно используемые в кнопках, всплывающих окнах, меню, маркерах управления включенными/отключенными состояниями, могут совместно использоваться несколькими компонентами, а также является основой для InputMap/ActionMaps для сопоставления штрихов клавиатуры с действиями. ActionMaps предоставляет массу энергии для повторного использования.
- Лучше всего просматривать события отправки на контроллер. Я говорю не о мусоре мыши/клавиатуры, а о событиях высокого уровня. Например, NewUserEvent, AddUserEvent, StartUserEvent и т.д. Попросите геймпада прослушать эти бизнес-события высокого уровня.Это будет способствовать инкапсуляции, сохраняя проблемы представления (следует ли использовать таблицу, список, дерево или что-то еще?) отделенными от потока приложения. Контроллер не волнует, нажал ли пользователь кнопку, меню или флажок.
- События не только для контроллера. Качели - это программирование событий. Ваша модель будет делать вещи вне SwingThread или в фоновом режиме. Отправка событий обратно на контроллер - это очень простой способ заставить его реагировать на происходящие на уровне модели вещи, которые могут использовать потоки для выполнения работы.
- Понимание правил многопоточности Swing! Вы удивитесь, как мало кто понимает, что Swing является однопоточным и что это означает для многопоточных приложений.
- Понять, что делает SwingUtilities.invokeLater ().
- Никогда * не используйте SwingUtilities.invokeAndWait (). Ты делаешь это неправильно. Не пытайтесь писать синхронный код при программировании событий. (* Есть некоторые угловые случаи, когда invokeAndWait () является приемлемым, но 99% времени вам не нужно invokeAndWait ()).
- Если вы начинаете новый проект с нуля, пропустите Swing. Он старый, и все кончено. Sun никогда не заботилась о клиенте так, как сервер. Свинг поддерживается плохо, и не было достигнуто большого прогресса с тех пор, как он был впервые написан. JavaFX ещё нет, и страдает от множества грехов Свинга. Я бы сказал, посмотрите на Apache Pivot . Много новых идей и лучшего дизайна и активного сообщества.
ответ дан 3 December 2019 в 13:21
поделиться