playframework вызывает метод модели из представления javascript

Как в учебном пособии по набору тегов (настройка грязного поля); я хочу добавить новую функциональность, когда пользователь выбирает тег, тогда javascript должен получить текущего пользователя (models.user) и вызвать метод user.doSomething(). возможно ли это сделать в пользовательском поле CRUD? (как в учебнике для тегов ябэ?).

есть ли способ сделать собственное поле CRUD в виде списка флажков, и когда пользователь устанавливает некоторые флажки, я должен написать код (возможно, javascript), который получает текущего зарегистрированного пользователя, а затем вызывает метод для этой пользовательской модели?

благодаря.


person othman    schedule 17.02.2012    source источник
comment
вам будет очень просто создать свою собственную форму, чем использовать форму, сгенерированную crud...   -  person Mooh    schedule 19.02.2012


Ответы (1)


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

#{crud.form}
    #{crud.custom 'tags'}
        <label for="tags">
            &{'tags'}
        </label>
        (...)
        <div class="tags-list">
            #{list items:models.Tag.findAll(), as:'tag'}
               <span id="${tag.id}" onclick="toggle(this)" class="tag ${object.tags.contains(tag) ? 'selected' : ''}">
                     /**** ADD An ACTION CALL HERE ******/
                    <a href="@{Application.getConnected().doSomething()}">${tag}</a>
                     /**** END *****/
               </span> 
               <input id="h${tag.id}" type="hidden" name="${fieldName}" 
                        value="${object.tags.contains(tag) ? tag.id : ''}" />
            #{/list}
        </div>
    #{/crud.custom}
#{/crud.form}

вы должны реализовать метод getConnected() самостоятельно в своем контроллере (возможно, Application.java). предположим, что вы используете Secure Module, это будет что-то вроде

void getConnected(){ 
        if(Security.isConnected()) {
            User user = User.find("byEmail", Security.connected()).first();
            renderArgs.put("user", user);
        }

}
person Mooh    schedule 19.02.2012
comment
Спасибо ; Я попробую и дам вам знать, если это сработает. Я заметил, как вы заключаете имя тега в href и указываете его на @{User.getConnected().doSomething()} . кажется умным обходным путем. я постараюсь посмотреть, работает ли это - person othman; 20.02.2012
comment
попробовал, но получил эту ошибку: No route found (In {module:crud}/app/views/tags/crud/form.html around line 37) No route able to invoke action User.getConnected was found. кажется, мне нужно добавить маршрут для пользователя модели? Как мы можем это сделать? он не может обнаружить User.getConnected() - person othman; 20.02.2012
comment
вы должны реализовать метод самостоятельно. я обновил свой ответ, посмотри .. - person Mooh; 20.02.2012
comment
Он по-прежнему выдает эту ошибку. Маршрут не найден (в {module:crud}/app/views/tags/crud/form.html около строки 37). Маршрут, способный вызвать действие User.getConnected, не найден. мне нужно реализовать метод действия контроллера и вызвать его вместо метода в models.User . я не думаю, что вызов метода models.user будет работать. это должен быть метод действия контроллера с определенным маршрутом. - person othman; 20.02.2012
comment
Итак, обходной путь, который работает для меня: реализовать метод действия controllers.Users.dosomething(). сделать этот метод последним вызовом renderJSON(user). добавить карту URL в файл маршрута. затем в javascript сделайте вызов Users.dosomething(). и лучше использовать jquery $.get(url, function(data), чтобы сделать его вызовом ajax - person othman; 20.02.2012