2013-11-27 5 views
0

Я создал Asp.Net MVC и использовал nuget для добавления HotTowel (V2.0.1 от 11/11/2013). Я создал пару моделей ViewModel, Models. Однако, я получил следующую ошибку.Не удалось загрузить требуемый модуль маршрутизации? дюрандальная ошибка?

"Не удалось загрузить маршрутизируемого модуль (ViewModels/myVM) Подробности:. Таймаут загрузки модулей: Дюрандаль/плагины/маршрутизатор \ nhttp: //requirejs.org/docs/errors.html#timeout"

ли это проблема durandal/plugins/router? Или это может быть вызвано некоторым кодом, который я добавил?

Ошибка произошла в Scripts/durandal/system.js.

var logError = function(error) { 
    if(error instanceof Error){ 
     throw error; 
    } 

    throw new Error(error); 
}; 

Ниже приведен код VM.

define(['services/datacontext', 'durandal/plugins/router', 'services/logger'], 
// Remove the durandal/plugins/router and the functions will get rid of the error. 
function (datacontext, router, logger) { 
    var title = 'Event'; 
    var vm = { 
     activate: activate, 
     deactivate: deactivate, 
     refresh: refresh, 
     events: events, 
     title: title 
    }; 

    return vm; 

    //#region Internal Methods 
    var events = ko.observableArray(); 

    function activate() { 
     logger.log(title + ' View Activated', null, title, true); 
     return datacontext.getEventPartials(events); 
    } 

    var deactivate = function() { 
     events([]); 
    }; 

    var refresh = function() { 
     return datacontext.getEventPartials(events, true); 
    }; 

    //#endregion 
}); 

Ниже стек вызовов

logError [system.js] Line 92 Script 
Anonymous function [router.js] Line 359 Script 
[External Code] 
Anonymous function [system.js] Line 260 Script 
[External Code] 
[Async Call]  
    .... 

код на router.js,

 isProcessing(true); 
     router.activeInstruction(instruction); 

     if (canReuseCurrentActivation(instruction)) { 
      ensureActivation(activator.create(), currentActivation, instruction); 
     } else { 
      system.acquire(instruction.config.moduleId).then(function(module) { 
       var instance = system.resolveObject(module); 
       ensureActivation(activeItem, instance, instruction); 
      }).fail(function(err){ 
        system.error('Failed to load routed module (' + instruction.config.moduleId + '). Details: ' + err.message); 
       }); 
     } 
    } 

И предыдущий один в system.js.

acquire: function() { 
     var modules, 
      first = arguments[0], 
      arrayRequest = false; 

     if(system.isArray(first)){ 
      modules = first; 
      arrayRequest = true; 
     }else{ 
      modules = slice.call(arguments, 0); 
     } 

     return this.defer(function(dfd) { 
      require(modules, function() { 
       var args = arguments; 
       setTimeout(function() { 
        if(args.length > 1 || arrayRequest){ 
         dfd.resolve(slice.call(args, 0)); 
        }else{ 
         dfd.resolve(args[0]); 
        } 
       }, 1); 
      }, function(err){ 
       dfd.reject(err); 
      }); 
     }).promise(); 
    }, 
+0

Как выглядит 'require.config.paths'? Обычно путь к маршрутизатору - 'plugins/router' в 2.0.x. Кроме того, переместите все vars, определенные ниже 'return vm' над' var vm = {... ', иначе они не будут определены до использования. – RainerAtSpirit

+0

require.config в main.js является 'require.config ({ пути: { 'текст': '../Scripts/text', 'Дюрандаль': '../Scripts/durandal', ' plugins ':' ../Scripts/durandal/plugins ', ' переходы ':' ../Scripts/durandal/transitions ' } }); ' – ca9163d9

+0

Попробуйте заменить' 'durandal/plugins/router'' на' «plugins/router» в коде VM. – RainerAtSpirit

ответ

1

Исходя из комментариев, которые я рекомендовал бы немного изменить код виртуальной машины, так что все переменные, которые возвращаются через vm определены перед использованием. Кроме того, вместо 'durandal/plugins/router' используется 'plugins/router'.

define(['services/datacontext', 'plugins/router', 'services/logger'], 
// Remove the durandal/plugins/router and the functions will get rid of the error. 
function (datacontext, router, logger) { 
    var title = 'Event'; 
    var events = ko.observableArray(); 
    var deactivate = function() { 
     events([]); 
    }; 
    var refresh = function() { 
     return datacontext.getEventPartials(events, true); 
    }; 

    var vm = { 
     activate: activate, 
     deactivate: deactivate, 
     refresh: refresh, 
     events: events, 
     title: title 
    }; 

    return vm; 

    //#region Internal Methods 
    function activate() { 
     logger.log(title + ' View Activated', null, title, true); 
     return datacontext.getEventPartials(events); 
    } 
    //#endregion 
}); 

BTW на имя Internals методы вводит в заблуждение, как и все в этом регионе возвращается через vm. Вместо этого я предпочитаю работать с именованной функцией, которые создаются перед оператором return, если они возвращаются, и помещают их под оператором return в Внутренние методы, если они не возвращены.

define(['services/datacontext', 'plugins/router', 'services/logger'], 
function(datacontext, router, logger) { 
    var title = 'Event'; 
    var events = ko.observableArray(); 

    function deactivate() { 
     events([]); 
    } 

    function refresh() { 
     return datacontext.getEventPartials(events, true); 
    } 

    function activate() { 
     logger.log(title + ' View Activated', null, title, true); 
     return datacontext.getEventPartials(events); 
    } 

    return { 
     activate: activate, 
     deactivate: deactivate, 
     refresh: refresh, 
     events: events, 
     title: title 
    }; 

    //#region Internal Methods 

    //#endregion 
}); 
Смежные вопросы