Jquery плагин исчезает - PullRequest
       9

Jquery плагин исчезает

0 голосов
/ 20 ноября 2018

Я создал очень простой плагин jQuery .widget, который я могу использовать:

<script type="text/javascript">
    (function( $ ) {
        $.fn.widget = function () {
            return this.each(function () {
                let $this = $(this);
                $this.load($this.attr("data-widget-source"), function (response, status, xhr) {
                    if (status == "error") {
                        const msg = "Sorry but there was an error: ";
                        $("#error").html(msg + xhr.status + " " + xhr.statusText);
                    }
                });
            });
        };
    }(jQuery)); 

    $(document).ready(function () {
        $('.widget').widget();
    });

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

$("#mymodal").load("/widget/29/", function(response, status, xhr) {
    if (status === "success"){                       
        M.FormSelect.init(document.querySelectorAll('select') , {});
        // Redirect submit event
        $("#slot_create_form").submit(function(e) {
           ajax_submit(e)
               .done(function( data, textStatus, jqXHR ) {
                   console.log("Slot from widget Form  data received: ");
                   console.log(data);
                   $('.widget').widget(); // Here fails 

           }).fail(function( jqXHR, textStatus, errorThrown ) {
                   console.log("Form ajax error received: ");
                   console.log(errorThrown);
           });
   });
}

Сбой с ошибкой

Ошибка типа: $ (...). Виджет не является функцией

1 Ответ

0 голосов
/ 21 ноября 2018

Как указал @Taplar, код, введенный $("#mymodal").load(), был полной страницей THML, которая имеет собственную ссылку на JQuery.Это перезагружало JQuery и, следовательно, удаляло плагин.

Проблема была исправлена ​​с использованием условных расширений в Django и предоставлением более простой версии страницы без сценариев:

{% extends request.no_frame|yesno:"frameless.html,frame.html,frame.html" %}

Этот атрибут запросаустанавливается промежуточным ПО:

class NoFrameMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if "frame" in request.GET:
            request.no_frame = {'frame': request.GET["frame"].lower() == 'false'}

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.
        return response

И вызов загрузки выглядит следующим образом:

$("#mymodal").load("/widget/29/?frame=False")

frame.html - это обычная страница, а frameless.html - это страница без заголовков иливсе, что мешает странице хоста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...