ExtJS: override all AJAX calls in assembly

What I'm trying to do is override all AJAX requests, including the AJAX proxy, so I created an override for Ext.data.Connection. In development mode, this works like a charm, but in the production assembly, things get a little weird.

The reason everything gets weird is because we are doing something that โ€œsharesโ€ the assembly link (

I think the problem is that since we are redefining such a functional part of the kernel, it is not actually redefined until app.js is loaded, which at that moment Ext.Ajax is a singleton overridden Ext.data.Connection class - already created, and we will lose this redefinition. Override seems to be included in app.js, so this assumption makes sense.

I think it should happen that build.xml should include this override in the framework.js file, but I really donโ€™t know how to do it ... I have never dealt with Ant, so I donโ€™t even know why to begin. If someone could point me in the right direction, that would be very helpful. Here is what build.xml looks like right now (see the beginning of a custom add comment for adding a code snippet):

<?xml version="1.0" encoding="utf-8"?>
<project name="NewApp" default=".help">

    <!-- Find and load Sencha Cmd ant tasks -->
    <script language="javascript">
        <![CDATA[
            var dir = project.getProperty("basedir"),
                cmdDir = project.getProperty("cmd.dir"),
                cmdLoaded = project.getReference("senchaloader");

            if (!cmdLoaded) {
                function echo(message, file) {
                    var e = project.createTask("echo");
                    e.setMessage(message);
                    if (file) {
                        e.setFile(file);
                    }
                    e.execute();
                };

                if (!cmdDir) {

                    function exec(args) {
                        var process = java.lang.Runtime.getRuntime().exec(args),
                            input = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream())),
                            headerFound = false,
                            line;

                        while (line = input.readLine()) {
                            line = line + '';
                            java.lang.System.out.println(line);
                            if (line.indexOf("Sencha Cmd") > -1) {
                                headerFound = true;
                            }
                            else if (headerFound && !cmdDir) {
                                cmdDir = line;
                                project.setProperty("cmd.dir", cmdDir);
                            }
                        }
                        process.waitFor();
                        return !!cmdDir;
                    }

                    if (!exec(["sencha", "which"])) {
                        var tmpFile = "tmp.sh";
                        echo("source ~/.bash_profile; sencha " + whichArgs.join(" "), tmpFile);
                        exec(["/bin/sh", tmpFile]);
                        new java.io.File(tmpFile)['delete']();
                    }
                }
            }

            if (cmdDir && !project.getTargets().containsKey("init-cmd")) {
                var importDir = project.getProperty("build-impl.dir") ||
                                (cmdDir + "/ant/build/app/build-impl.xml");
                var importTask = project.createTask("import");

                importTask.setOwningTarget(self.getOwningTarget());
                importTask.setLocation(self.getLocation());
                importTask.setFile(importDir);
                importTask.execute();
            }
        ]]>
    </script>

    <!--
    The following targets can be provided to inject logic before and/or after key steps
    of the build process:

        The "init-local" target is used to initialize properties that may be personalized
        for the local machine.

            <target name="-before-init-local"/>
            <target name="-after-init-local"/>

        The "clean" target is used to clean build output from the build.dir.

            <target name="-before-clean"/>
            <target name="-after-clean"/>

        The general "init" target is used to initialize all other properties, including
        those provided by Sencha Cmd.

            <target name="-before-init"/>
            <target name="-after-init"/>

        The "page" target performs the call to Sencha Cmd to build the 'all-classes.js' file.

            <target name="-before-page"/>
            <target name="-after-page"/>

        The "build" target performs the call to Sencha Cmd to build the application.

            <target name="-before-build"/>
            <target name="-after-build"/>
    -->
    <!-- BEGIN CUSTOM ADDITION TO BUILD.XML -->
    <target name="-after-js">
        <!-- The following is derived from the compile-js target in
             .sencha/app/js-impl.xml. Compile the viewport and all of its
             dependencies into viewport.js. Include in the framework
             dependencies in the framework file. -->
        <x-compile refid="${compiler.ref.id}">
            <![CDATA[
            union
              -r
              -class=${app.name}.view.main.Main
            and
            save
              viewport
            and
            intersect
              -set=viewport,allframework
            and
            include
              -set=frameworkdeps
            and
            save
              frameworkdeps
            and
            include
              -tag=Ext.cmd.derive
            and
            concat
              -remove-text-references=${build.remove.references}
              -optimize-string-references=${build.optimize.string.references}
              -remove-requirement-nodes=${build.remove.requirement.nodes}
              ${build.compression}
              -out=${build.framework.file}
              ${build.concat.options}
            and
            restore
              viewport
            and
            exclude
              -set=frameworkdeps
            and
            exclude
              -set=page
            and
            exclude
              -tag=Ext.cmd.derive,derive
            and
            concat
              -remove-text-references=${build.remove.references}
              -optimize-string-references=${build.optimize.string.references}
              -remove-requirement-nodes=${build.remove.requirement.nodes}
              ${build.compression}
              -out=${build.out.base.path}/${build.id}/viewport.js
              ${build.concat.options}
            ]]>
        </x-compile>

        <!-- Concatenate the file that sets the main view. -->
        <concat destfile="${build.out.base.path}/${build.id}/viewport.js" append="true">
            <fileset file="classic/viewport.js"/>
        </concat>
    </target>

    <target name="-before-sass">
        <!-- The viewport is not explicitly required by the application,
             however, its SCSS dependencies need to be included. Unfortunately,
             the property required to filter the output, sass.name.filter, is
             declared as local and cannot be overridden. Use the development
             configuration instead. -->
        <property name="build.include.all.scss" value="true"/>
    </target>

</project>

, sencha app watch , Singleton, sencha app build production . . , Ext.Ajax -... , , , , , , , .

0
1

, , . Build.xml, , framework.js, app.js. app.json, node. , , , framework.js app.js, ... , , .

<x-compile refid="${compiler.ref.id}">
    <![CDATA[
    union
      -r
      -class=${app.name}.view.main.Main
    and
    save
      viewport
    and
    intersect
      -set=viewport,allframework
    and
    include
      -set=frameworkdeps
    and
    save
      frameworkdeps
    and
    include
      -tag=Ext.cmd.derive
    and
    // added this
    include
      -set=page
    and
    concat
      -remove-text-references=${build.remove.references}
      -optimize-string-references=${build.optimize.string.references}
      -remove-requirement-nodes=${build.remove.requirement.nodes}
      ${build.compression}
      // changed this
      -out=${build.classes.file}
      ${build.concat.options}
    and
    restore
      viewport
    and
    exclude
      -set=frameworkdeps
    and
    exclude
      -set=page
    and
    exclude
      -tag=Ext.cmd.derive,derive
    and
    concat
      -remove-text-references=${build.remove.references}
      -optimize-string-references=${build.optimize.string.references}
      -remove-requirement-nodes=${build.remove.requirement.nodes}
      ${build.compression}
      -out=${build.out.base.path}/${build.id}/viewport.js
      ${build.concat.options}
    ]]>
</x-compile>

node app.json:

"framework": {
  // Added this path
  "path": "${build.id}/app.js",
  "enable": true
}
0

Source: https://habr.com/ru/post/1681405/


All Articles