【问题标题】:Spinner is not defined in Ladda with RequireJS在 Ladda 中没有使用 RequireJS 定义 Spinner
【发布时间】:2013-06-10 16:02:17
【问题描述】:

我正在尝试在使用 require.js 以及引导组件的主干呈现的页面上放置一个 ladda 按钮。但是,我得到了

"Uncaught ReferenceError: Spinner is not defined".

我从原来的 ladda.js 中剪下缩小后的 spin.js 并将它们放在同一个目录中。

Shim'ed ladda 如下:

require.config ({
   paths: {
            //jquery, underscore, backbone here
            spin : 'libs/ladda/spin',
            ladda: 'libs/ladda/ladda'
   },

   shim: {
        ladda: {
            deps: ['spin'],
            exports: 'Ladda'    
    }
}
});

在主干视图中:

define([
  'jquery',
  'underscore',
  'backbone',
  'bootstrap',
  'spin',
  'ladda',
 ], function($, _, Backbone, Bootstrap, Spinner, ladda){
    render: function () {
        //templating

        console.log ('Spinner: ' + typeof Spinner);
        Ladda.create ($('button'));    
   }
});

我可以看到typeof Spinner 是一个函数。 Spinner.name 属性为“p”。 Spinner.name 不应该是“Spinner”而不是“p”吗?还是“p”继承自缩小变量?

为了让 Spinner 在 ladda.js 的范围内可见,我错过了哪些其他步骤?欣赏任何建议。

谢谢。

更新: 感谢 Bass Jobsen 的建议,使用 hakimel 提交 spin.js, Spinner 已加载但错误仍然存​​在。在 Chrome 开发工具控制台下方:

【问题讨论】:

  • ladda.js 调用 var spinner = new Spinner;所以 spinner 应该是一个对象?当我将微调器重写为 window.Spinner =(function() { "use strict"; ......(跳过第一个包装器)。微调器仍然是一个对象,但错误将是` spinner.spin is not a function `. 注意我使用define代替require,另见;bardevblog.wordpress.com/2013/01/05/…

标签: twitter-bootstrap backbone.js requirejs spin.js


【解决方案1】:

基于 github.com/hakimel/Ladda/pull/7,我将 spin.js 重写为像 Ladda 本身这样的类。我使用了定义而不是要求(http://bardevblog.wordpress.com/2013/01/05/re-learning-backbone-js-require-js-and-amd/)。 现在 spinner 也是一个对象。

Ladda.bind() 似乎不起作用(或者我不明白会发生什么)。你可以创建一个新的按钮对象:Ladda.create();

见:http://plnkr.co/edit/DuIVFP0UP8sSoek9gEZc

//https://github.com/requirejs/example-jquery-cdn   
requirejs.config({
    //"baseUrl": "js/lib",
    enforceDefine: true,
    "paths": {
      "app": "app",
      "jquery": "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min",
      "spin": "spin",
      "ladda": "ladda"
    },
    shim: {
        "spin": {exports: "Spinner"},
        "ladda": {
            depends: "spin",
            exports: "Ladda"
        },



        }
});

// Load the main app module to start the app
requirejs(["app/main"]);

app/main.js

define(["jquery",'ladda','spin'], function($,ladda) {
    //the jquery.alpha.js and jquery.beta.js plugins have been loaded.
    $(function() {
      console.log("$: " + typeof $);
      console.log("ladda: " + typeof Ladda);
      console.log("spin: " + typeof Spinner);

      Ladda.bind($('button')[0]); //don't work ????????????
      //return;
      //Ladda.create('.ladda-button');
      var l = Ladda.create($('button')[1]);

    l.start();

// Will display a progress bar for 50% of the button width
l.setProgress( 5 );

// Stop loading
l.stop();

// Toggle between loading/not loading states
l.toggle();

// Check the current state
l.isLoading();


    });
});

【讨论】:

  • 这行得通!通过移除 AMD 模块并植入 window.Spinner 的出色解决方法。谢谢!
【解决方案2】:

不应该是ladda 和小写l。因为这是你的 require 函数中参数的名称。

ladda.create ($('button'));  

【讨论】:

  • 改成ladda(带小写l),有无RequireJS exports,错误依旧。
猜你喜欢
  • 2016-12-29
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
相关资源
最近更新 更多