Калитка + Javascript

Я оборачиваю виджет Javascript в компонент Wicket. Я хочу, чтобы сторона JS разговаривала с компонентом. Что у меня есть на данный момент:

Рассматриваемый компонент выглядит как

talker = new GridAjaxBehavior();
this.add(talker);    

в конструкторе

а затем, позже, помещает что-то вроде

"var MyGridTalker = new talker(" + this.talker.getCallbackUrl() + ");";

в JS.

где GridAjaxBehavior расширяет AbstractDefaultAjaxBehavior. Я хочу, чтобы GridAjaxBehavior возвращал немного XML, когда JS вызывает его.

Правильно ли я делаю это? Что должен сделать GridAjaxBehaviour, чтобы вернуть XML?

Спасибо

К вашему сведению, в вашем коде javascript есть ошибка. Вам не хватает парного знака и точки с запятой справа, но вам также не хватает кавычек вокруг предоставленной строки. ... новый говорящий (\ "" + this.talker.getCallbackURL () + "\"); "; или что-то в этом роде.

davenpcj 20.10.2008 19:43

PSA: Wicket ~ = Java Framework. wicket.apache.org/introduction.html

annakata 03.04.2009 15:30

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

Andreas Petersson 03.04.2009 15:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
3
4 231
2

Ответы 2

Я действительно не знаю, что такое Wicket и что он делает, но в вашем коде есть небольшая ошибка (как кажется).

Этот:

"var MyGridTalker = new talker(" + this.talker.getCallbackUrl();

Кажется, вам не хватает конечных пар:

"var MyGridTalker = new talker(" + this.talker.getCallbackUrl() + ")";

В любом случае, ничего страшного, но не знал, было ли это намеренно.

Плюнуть немного XML для чего? Предположительно обновить модель или вид, да?

Сила Wicket в том, что вам не нужно беспокоиться о визуализированном HTML. В терминах модель-представление-контроллер вы настраиваете контроллер для правильного изменения модели, а Wicket заботится о представлении.

Разделение не является четким полностью: на самом деле вы можете показать / скрыть компоненты представления или изменить их, и это можно рассматривать как изменение представления.

Но обычно вам не нужно напрямую управлять браузером или javascript. Wicket позаботится об этом, если вы позаботитесь о внесении изменений в код Java.

В Wicket Ajax вызовет метод вашего AjaxBehavior с целью AjaxRequestTarget.

В этом методе (или в методах, вызываемых из него) вы делаете все, что вам нужно, обновляете модели или представления, а затем добавляете к цели любой компонент представления, который был изменен. Wicket позаботится об обновлении браузера.


Вот пример. Это взято из кода, который я сделал, но сильно изменен просто для большей ясности. Идея проста: «связанные» раскрывающиеся варианты, где параметры в дочернем элементе изменяются при изменении параметра выбора в родительском, как в серии [Штат] [Округ] [Район].

(В фактическом классе изменение модели передается дочернему элементу, который сам решает, изменилось ли оно, и добавляет себя к цели, если это так, а затем передает цель своему дочернему элементу. Я удалил большую часть этого в сделайте более ясный пример.)

Вот ctor, который просто добавляет к себе анонимный подкласс AjaxBehavior:

public AjaxChildNotifyingDropDownChoice(...code elided for clarity...) {
    this.child = child;

    // Ajax won't work without this:
    setOutputMarkupId(true);
    // 
    add( new OnChangeAjaxBehavior() {
        @Override
        public void onUpdate(final AjaxRequestTarget target) {

            // tell child to update its list
            // based on newly selected value

            // when the Ajax is called, 
            // my owning component's model
            // is already updated

            // note we could just type getModel()
            // I'm making explicit that we're calling it
            // on the enclosing class 
            // (which a non-static inner class has a hidden ref to) 
            child.setNewModelBasedOnSelectionOf( 
               AjaxChildNotifyingDropDownChoice.this.getModel());

            // now add the child to the target
            // Wicket javascript will receive the new 
            // options and re-render the child dropdown
            target.add(child);

        }
    });
}

Мы также могли бы иметь скрытые или не скрытые компоненты, или добавлять поведения, такие как стили CSS, или даже менять одну панель на другую. Поскольку для каждого измененного компонента мы: 1) называется setOutputMarkupId (true); чтобы javascript мог его найти, и 2) добавил его в AjaxRequestTarget

Обратите внимание, что разные типы (подклассы) Ajax Behavior имеют разные функции обратного вызова, поэтому убедитесь, что вы переопределяете правильную (добавьте аннотацию @Override, чтобы компилятор мог пожаловаться, если вы ошиблись в названии).

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

Единственная причина, по которой я могу отправить прямой XML, - это передать его в javascript, не относящийся к Wicket. Дайте мне знать, если это ваша цель, и я полностью упустил суть. ;)

Другие вопросы по теме