为什么未调用我的require.js配置中的垫片的“ init”?

六月

更新

我正在编写一个小模块来处理骨干网中的此csrf令牌问题,直到获得@Louis答案的推送通知。

他的回答很优雅,看起来也不错,但是我将为所有需要它的人留下指向我的ribs.csrf模块github repo的链接

================================================== ==================

我将BackboneDjango后端一起用作前端框架

Backbone.sync为了与Django的CSRF保护系统兼容,我必须对每个AJAX请求在发送前都设置CSRF请求标头。

由于我使用require.js进行模块化javascript开发,因此我尝试配置in shim.initrequire.config以便在将Backbone加载到浏览器中后立即触发此覆盖:

<script>
    var require = {
        ...

        shim: {
            'jquery': {'exports': 'jQuery'},
            'backbone': {
                'deps': ['underscore', 'jquery'],
                'exports': 'Backbone',
                'init': function(_, $) {
                     alert('NOT EVEN CALLED');
                     var originalSync = this.Backbone.sync;
                     this.Backbone.sync = function(method, model, options) {
                         options.beforeSend = function(xhr) {
                             xhr.setRequestHeader('X-CSRFToken', window.csrf_token);
                         }
                         return originalSync(method, model, options);
                     }
                 }
            }
        }
    }
</script>
// Load require.js
<script src="require.js"></script>

尽管主干已成功加载,但未调用require配置的“ init”。

问题是什么?

路易

查看带注释的源代码,我看到Backbonedefine在检测到它正在使用AMD加载程序运行时调用使用shim与调用模块define导致不确定的行为,因为shim是该模块不叫define

您可以使用伪造的backbone模块来实现所需的目标,并将其保存在名为backbone-glue.js以下文件的文件中

define(['backbone'], function (Backbone) {
    var originalSync = Backbone.sync;
    Backbone.sync = function(method, model, options) {
        options.beforeSend = function(xhr) {
            xhr.setRequestHeader('X-CSRFToken', window.csrf_token);
        }
        return originalSync(method, model, options);
    };

    return Backbone;
});

然后在RequireJS的配置中应该有一个这样的映射:

map: {
     '*': {
          backbone: 'backbone-glue'
     },
     'backbone-glue': {
          backbone: 'backbone'
     }
}

它的作用是在需要*模块时到处(backbone都需要RequireJS加载backbone-glue但是,在中backbone-gluebackbone需要时,则将backbone其加载。这样可以backbone-glue加载原始骨干网。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在多次继承中执行Base .__ init __(self)而不是super().__ init __()时会跳过__init__?

为什么在我的代码中未调用onSubmit?

为什么要在init()中检查nil

为什么我不能在Swift中的UIViewController上调用默认的super.init()?

为什么braced-init-list在函数调用和构造函数调用中的行为不同?

Swift:为什么我不能从覆盖init调用方法?

为什么std :: ios_base :: Init中的“ Init”是大写的?

为什么现在必须在Swift中覆盖我的init?

为什么在PHP类中未调用我的getter(__get)?

为什么在类中需要Thread .__ init __()?

为什么我提供init()函数时调用init(coder :)

为什么我在结构体中调用self.init之前得到错误“ self”?

为什么连续调用以RequestContext .__ init__中的空字典更新?

为什么在子类MTKView中未调用我的draw方法?

换能器的init未调用

为什么在自定义UIView类中未调用init(frame:CGRect)?

为什么我的self.init不自动填充到便利初始化程序中?

为什么__init__在python中失败

如果我在-init中什么也不做,是否与仅调用[MyClass alloc]一样?

为什么将python变量存储在init之外的类中,并且它是自我要求的?

在postgresql中,为什么_PG_init被调用两次?

只要init调用[super init],在Objective C自定义init方法中调用[self init]是否可以?

为什么我的默认属性值仍在Init()中显示为参数?

为什么我的变量在 init 中未定义?

我在子类中覆盖了一个属性的setter,但是当我在超类的init方法中调用它时,为什么子类的方法响应?

为什么 __init__() 方法中的属性未显示在 dir(Foo) API 中?

为什么 mpl_connect 在类的 __init__ 中调用时不起作用?

为什么我不能在 init 中获得我的 fetchedResults?

为什么我仍然可以在 Swift 中不带参数地调用 init()