我们发现了一个 Durandaljs 2.1 应用程序的一个相当隐蔽的问题,这个问题以前并没有真正暴露出来。
本质上,我们收到的错误似乎是 404 错误。然而,我们添加了一些额外的错误跟踪,发现似乎是一个计时错误。
我们进行的修改如下
viewEngine.createFallbackView = function (viewId, requirePath, err) {
var that = this,
message = 'View Not Found. Searched for "' + viewId + '" via path "' + requirePath + '". Error: ' + err.message;
return system.defer(function (dfd) {
dfd.resolve(that.processMarkup('<div class="durandal-view-404">' + message + '</div>'));
}).promise();
};
尝试加载特定视图时,我们收到未找到视图警告,然后显示该视图的 Javascript。当代码没有被缩小时,这种情况很少发生,尽管在 Iphone 等移动设备上似乎更常见。这在开发中根本不会发生。
但是,一旦我使用 Grunt 来缩小 javascript,在开发环境中每次都会发生错误。这让我怀疑一个最隐蔽的计时错误。有没有其他人遇到过这种问题并就我们如何解决这个问题提出任何建议。我们正在使用 Durandaljs 2.1。
我们收到的错误是形式
View Not Found. Searched for "views/stationDetails(router,dataManager){var _this=this;[Javascript ViewModelCode].fail(function(){}).promise.html".
转到默认页面时,该应用程序始终可以正常加载,但是错误发生在单独的视图上。
刚刚在此视图中对代码进行了另一次审查。实际的 durandal 激活函数返回一个承诺对象,这可能与问题有关?
感激地收到任何帮助。
好的,我做了更多的游戏,并意识到有更多与这篇文章相关的信息。我们正在为我们的视图模型使用打字稿,这个问题与使用实例化视图模型与单例有关。
所以在大多数情况下,我们有一个单例视图模型,我们定义如下:
export class viewModelObject {
constructor() { }
}
define([], () => {
return new viewModelObject();
});
在我们需要实例化视图模型的情况下,我们完成了以下操作:
define([], () => {
return () => {
return new viewModelObject();
};
});