我有一个视图,它扩展了一个外部库(我们称之为ExtLib)也基于主干木偶。基本上这个lib是共享行为的公共视图的包装器(例如DetailsView,FormView等)。所以,让我说我有这样的事情:
MyApp.module('Views', function(Views, App, Backbone, Marionette, $, _) {
Views.MyDetailsView = Marionette.ExtLib.DetailsView.extend({
options: {
fields: [
// ...
],
myFunction: function() {
// ...
}
}
});
});
在我的Jasmine测试中,我调用了一个创建MyDetailsView实例的控制器方法。
it('does what it should', function() {
// ...
controller.showDetails();
// my expectations
});
实际上,控制器中的方法只是创建视图并将其渲染(进入布局的区域)。
showDetails: function(story) {
var container = new App.Layouts.DetailsLayout();
var myDetailsView = new App.Views.MyDetailsView({
model: story
});
container.details.show(storyDetailsView);
}
最后,这是我得到的错误:
TypeError: Cannot read property 'length' of undefined
at eval (eval at <anonymous> (http://localhost:8080/myapp/js/lib/underscore/underscore-min.js?_debugResources=y&n=1354890505115:30:350), <anonymous>:17:35)
at c (http://localhost:8080/myapp/js/lib/underscore/underscore-min.js?_debugResources=y&n=1354890505115:30:430)
at Object.Backbone.Marionette.Renderer.render (http://localhost:8080/myapp/js/backbone-app/conf/renderer.js?_debugResources=y&n=1354890505115:9:17)
at r.ItemView.r.View.extend.render (http://localhost:8080/myapp/js/lib/backbone/backbone.marionette.min.js?_debugResources=y&n=1354890505115:13:4719)
at Backbone.Marionette.ExtLib.ExtLib.DetailsView.Backbone.Marionette.View.extend.renderFieldView (http://localhost:8080/myapp/js/lib/backbone.marionette.extlib.min.js?_debugResources=y&n=1354890505115:395:14)
// etc...
我认为问题在于茉莉花不了解ExtLib。我如何监视renderFieldView以避免错误?
提前感谢,一如既往。
答案 0 :(得分:0)
我认为问题在于茉莉花不了解ExtLib。
我无法从堆栈跟踪中判断出您的诊断是否正确;但要验证这一点,您可以在Jasmine运行器上查看源代码,看看是否在运行器页面中包含了ExtLib。
如果ExtLib包含 ,则修复程序取决于您运行Jasmine的方式。如果您正在使用Jasmine gem并且您有一个jasmine.yml文件,那么您需要编辑jasmine.yml以包含ExtLib。如果您有一个“简单”的配置并且手动维护Jasmine包含的Javascript文件,那么您需要添加一行以将ExtLib包含在跑步者的源文件中。