1

我想将Noty其用作依赖项RequireJS。问题出在依赖函数中。它依赖$q和注意。$q没关系,但 noty 有错误 - noty 不是函数。任何人都可以帮助解决这个问题。

应用程序.js

通知程序.js

4

1 回答 1

0

我无法重现您的问题。我已经包含了一个工作代码片段,它在底部复制了您的设置。你能把它和你的比较一下,看看我做了什么不同的事情吗?检查我的notyq版本。

如果您提供了准确的错误消息和行号,将会有所帮助。

此外,在您的通知模块定义中,您有:

define(['noty', '$q'], function (noty, $q) {
    var notifier = (function notifier() {
        var MESSAGE_TIMEOUT = 3000;

        function notifier(){
        }
        //...
        return notifier;
    })(noty, $q);

    return notifier;
});

这真是令人困惑的做法。您有三个名为通知程序的东西,我认为不需要将模块包装在 IIFE 中。你可以有:

define(['noty', '$q'], function (noty, $q) {
    var MESSAGE_TIMEOUT = 3000;

    function notifier(){}
    //...
    return notifier;
});

这是工作片段:

require.config({
  paths: {
    "jquery": "http://code.jquery.com/jquery-2.1.1.min",
    "noty": "https://rawgit.com/needim/noty/v2.3.5/js/noty/packaged/jquery.noty.packaged.min",
    "$q": "https://rawgit.com/kriskowal/q/v1.3.0/q"
      //"notifier": "/content/js/notifier" // note, defined as a named module below
  }
});


define('notifier', ['noty', '$q'], function(noty, $q) {
  var notifier = (function notifier() {
    var MESSAGE_TIMEOUT = 3000;

    function notifier() {}

    notifier.prototype.showErrorMessage = function(msg) {
      var deferred = $q.defer();

      noty({
        text: msg,
        type: 'error',
        layout: 'topCenter',
        timeout: MESSAGE_TIMEOUT
      });

      setTimeout(function() {
        deferred.resolve();
      }, MESSAGE_TIMEOUT);

      return deferred.promise;
    };

    notifier.prototype.showSuccessMessage = function(msg) {
      var deferred = $q.defer();

      noty({
        text: msg,
        type: 'success',
        layout: 'topCenter',
        timeout: MESSAGE_TIMEOUT
      });

      setTimeout(function() {
        deferred.resolve();
      }, MESSAGE_TIMEOUT);

      return deferred.promise;
    };

    notifier.prototype.showConfirmMessage = function(confirmMessage) {
      var deferred = $q.defer();

      noty({
        text: confirmMessage,
        type: 'confirm',
        layout: 'topCenter',
        buttons: [{
          text: "Yes",
          onClick: function($noty) {
            deferred.resolve();
            $noty.close();
          }
        }, {
          text: "Cancel",
          onClick: function($noty) {
            deferred.reject();
            $noty.close();
          }
        }]
      });

      return deferred.promise;
    };

    return notifier;
  })(noty, $q);

  return notifier;
});

requirejs(["jquery", "noty", "$q", "notifier"],
  function($, noty, $q, notifier) {
    $("#btn").click(function() {
      var n = new notifier();
      n.showSuccessMessage('Success');
    });
  });
<script src="http://requirejs.org/docs/release/2.1.17/minified/require.js"></script>
<button id="btn">btn</button>

于 2015-05-01T17:20:03.377 回答