Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何中止RequireJS';要求';要求_Javascript_Backbone.js_Requirejs_Deferred - Fatal编程技术网

Javascript 如何中止RequireJS';要求';要求

Javascript 如何中止RequireJS';要求';要求,javascript,backbone.js,requirejs,deferred,Javascript,Backbone.js,Requirejs,Deferred,是否可能(以及如何)中止RequireJSrequire请求 我希望能够做到以下几点: define([ 'Backbone.View' ], function (BackboneView) { var View = BackboneView.extend({ initialize: function () { // store require deferred // (I know this is not p

是否可能(以及如何)中止RequireJS
require
请求

我希望能够做到以下几点:

define([
    'Backbone.View'
],
function (BackboneView) {

    var View = BackboneView.extend({

        initialize: function () {

            // store require deferred
            // (I know this is not possible in this way!)
            // Is there a way to capture require deferred?

            this.deferred = require(['someModule'], function () {

                // do something

            });

        },

        close: function () {

            // abort require request if view is closed before request resolves
            this.deferred.abort();

            this.remove()

        }

    });

    return View;

});
因此,如果主干视图在
require
请求解决之前关闭,我希望能够中止
require
请求

我已经查看了RequireJS文档和他们的GitHub页面。 没有描述如何处理这个问题

欢迎任何帮助:)
Tnx

您的问题有点奇怪,因为您将只部署一个最小化的文件,而且几乎不会有延迟

请注意,require只需按一定比例向DOM添加一个脚本元素,如
datarequiremodule=[MODULE\u NAME]
因此,您基本上可以执行以下操作:

function abortModuleLoad(moduleName)
    var scripts = document.getElementsByTagName('script');
    for(var i = 0 ; i < scripts.length ; i++){
        if(scripts[i].dataset.requiremodule === moduleName) document.head.removeChild(scripts[i])
    }
}

close: function () {

    // abort require request if view is closed before request resolves
    abortModuleLoad("someModule");

    this.remove()

}
函数abortModuleLoad(moduleName)
var scripts=document.getElementsByTagName('script');
对于(var i=0;i
RequireJS不提供取消
require
调用的方法

我认为从理论上讲,实现它是可能的,但它会使RequireJS的内部功能复杂化很多,从而获得相当少的好处。假设您需要
foo
,请考虑:

  • 您的代码实际处于需要取消
    require
    调用的位置的频率是多少?您的视图必须连续快速初始化和关闭

  • 如果在发出
    require
    调用之前已提取并初始化
    foo
    ,则
    require
    所要做的唯一工作就是返回对
    foo
    的现有引用。所以基本上没有什么可以取消的。请注意,如果允许视图在应用程序中完全初始化一次,则此处考虑的场景适用

  • 如果RequireJS在取消之前足够快地完成
    require
    调用,那么取消就没有效果。一旦应用程序得到优化,RequireJS很可能会在取消之前完成调用。在优化的应用程序中,运行
    require
    的代码与所需的代码位于同一捆绑包中,因此RequireJS不必从网络获取任何东西来满足
    require
    调用


  • 因此,在许多情况下,取消将是无效的,但对于RequireJS可能不得不取消某些内容的情况,它必须对谁需要什么进行详细的说明。可能视图中的
    require
    调用是唯一需要
    foo
    的调用,但是
    foo
    也可能需要
    bar
    baz
    。如果
    foo
    是唯一需要它们的,那么如果取消
    require
    调用,那么RequireJS可以取消获取和初始化
    foo
    bar
    baz
    但是在发布
    require
    之后,但在它完成应用程序的另一部分之前,总是有可能需要
    baz
    。所以现在RequireJS必须记住,可以取消
    foo
    bar
    ,但是不能取消
    baz
    ,因为它是在其他地方需要的。

    您测试过吗?你知道删除RequireJS添加的
    脚本
    元素实际上不会导致RequireJS进入不一致的状态吗?嗨,raam86,谢谢你的回答。问题是我不想运行r.js。所以脚本不会缩小到一个文件。某些文件在某些情况下应该加载。另外,在头文件中创建脚本标记之前,应该动态加载脚本源。如果视图关闭且请求尚未解决,我想中止此操作。非常感谢您的回答。我必须承认我不是那样看的,但你是对的。您建议对所有模块和文件运行优化(r.js),还是只对部分模块和文件运行优化(r.js),让其他模块和文件动态加载?不客气。是将所有内容捆绑在一个文件中还是拥有多个捆绑包实际上取决于应用程序的详细信息。在很多情况下,将所有内容捆绑到一个文件中是一种方法。但是,如果您有一个带有可选插件的应用程序,那么没有充分的理由将所有内容捆绑在一起,特别是如果插件是大量的。在这种情况下,一个核心包加上每个插件一个包就是最好的选择。