【问题标题】:Include a custom Jquery plugin in Backbone + Requirejs using shim使用 shim 在 Backbone + Requirejs 中包含一个自定义 Jquery 插件
【发布时间】:2012-12-20 22:06:53
【问题描述】:

我有一个主干项目,我正在使用 require.js 来模块化代码。

我的 main.js 看起来像这样:

require.config({
    paths:{
        jquery:'../../../../core/js/external/jquery/jquery-1.8.2',
        underscore:'../../../../core/js/external/underscore/underscore',
        backbone:'../../../../core/js/external/backbone/backbone',
        text:'../../../../core/js/external/require/text',
        backbone_paginate:'../../../../core/js/external/backbone/backbone.pagination',
        'jquery.sprites':'../../../../core/js/sprites',
        'jquery.sprite_util':'../../../../core/js/util/spriteUtil'


    },
    shim:{
        'backbone':{
            deps:['underscore', 'jquery'],
            exports:'Backbone'
        },
        'underscore':{
            exports:'_'
        },
        'jquery.blades':{
            deps:['jquery']
        },

        'jquery.sprites':{
            deps:['jquery']
        },
        'jquery.sprite_util':{
            deps:['jquery.sprites']
        }
    }
    }
});
require(['../app'], function (AppView) {
    "use strict";
    new AppView();
});

所以,这里的 jquery.sprites 和 jquery.utils 是我需要使用的插件,而不会将它们包含在我的视图中。目前,我必须将它们包括在任何使用它们的地方。例如:

define([
  'jquery',
  'underscore',
  'backbone',
  'views/SimpleNamedObjectView',
  'jquery.sprites',
  'jquery.sprite_util',


], function($, _, Backbone, SimpleNamedObjectView){
  "use strict";

有没有一种方法可以访问 jquery.sprites 和 jquery.sprite_util 而无需将它们包含在每个视图中?它是否可以对 main.js 中的所有视图变得全局,以便我可以使用这些插件的功能而不将它们包含在所有视图中? 例如 this.$el.getSprites(); (其中getSprites是jquery.sprites的一个方法)

【问题讨论】:

    标签: jquery jquery-ui backbone.js requirejs backbone-views


    【解决方案1】:

    一旦它们被加载,因为它们被“填充”,它们将在全球范围内可用。

    因此,您可以在 main.js 内部的引导 require 调用中将它们称为依赖项。这会奏效。

    但是!这完全违背了 Require.js 和 AMD 的理念。每个模块都应该声明它们的所有依赖项,以便它们都可以单独加载并按原样工作。这也将允许更轻松的单元测试。

    所以,是的,你可以,但你真的不应该这样做

    【讨论】:

    • 我同意你所说的。但是假设我已经下载了一个像 Datepicker 这样的 jquery 插件,并且我希望它在我的应用程序中是全局的,因为许多视图会使用该插件,你不认为将它设为全局是一个好主意吗?
    • 不,因为如果你不跟踪每个模块中的依赖关系,那么如果你决定删除它,你可能会破坏某些东西,或者当不再使用依赖关系时你可能不会这样做。在所有情况下,它都可以在全球范围内工作,但将来很难扩展您的应用程序(与其他新的、其他的、开发人员和您未来的自己)。
    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多