2015-05-01 4 views
1

Я хочу использовать Noty в качестве зависимости от RequireJS. Проблема заключается в зависимой функции. Он полагается на $q и noty. $q все в порядке, но есть ошибка с noty - noty не является функцией. Может кто-нибудь помочь с этой проблемой.Noty with RequireJS

app.js

notifier.js

ответ

0

Я не могу воспроизвести вашу проблему. Я включил фрагмент рабочего кода, который дублирует вашу настройку внизу. Можете ли вы сравнить его с вашим, чтобы увидеть, сделал ли я что-то существенное по-другому? Проверьте мои версии noty и q.

Это поможет, если вы указали точное сообщение об ошибке и номер строки.

Кроме того, в вашем уведомителе определении модуля у вас есть:

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>