Templates 茉莉花的模板测试
我正在尝试使用Jasmine(带有yaml配置的gem)来测试Backbone.js应用程序。我正在使用下划线模板,就像 我的问题是,我无法在模型/视图之前加载模板,因此模板调用会导致这些类在加载时出错 我读过关于jasmine jquery插件来制作装置的文章,但问题是我的src文件(模型/视图)在得到规范文件并能够设置所需装置之前就被加载并失败了Templates 茉莉花的模板测试,templates,backbone.js,bdd,jasmine,jasmine-jquery,Templates,Backbone.js,Bdd,Jasmine,Jasmine Jquery,我正在尝试使用Jasmine(带有yaml配置的gem)来测试Backbone.js应用程序。我正在使用下划线模板,就像 我的问题是,我无法在模型/视图之前加载模板,因此模板调用会导致这些类在加载时出错 我读过关于jasmine jquery插件来制作装置的文章,但问题是我的src文件(模型/视图)在得到规范文件并能够设置所需装置之前就被加载并失败了 如何尽早加载模板,使其可用于重置我的类?您可以延迟jQuery选择器,直到需要它: render: function(){ var templ
如何尽早加载模板,使其可用于重置我的类?您可以延迟jQuery选择器,直到需要它:
render: function(){
var templateHtml = $(this.template).html();
_.template(templateHtml);
}
或者,可以在视图初始化时运行选择器:
initialize: function(){
this.template = _.template($(this.template).html());
}
或者,如果您真的想让代码保持原样,并在定义视图时让选择器进行求值,您可以将所有主干代码包装在一个函数中,当您想初始化整个应用程序代码时,您可以调用该函数。。。例如,真实HTML页面上的jQuery$(function(){}
函数,或Jasmine测试中每个函数之前的:
在你的茉莉花测试中:
describe("how this thing works", function(){
beforeEach(function(){
var myApp = MyApp();
this.view = new myApp.MyView();
// ...
});
});
一旦您有了这些解决方案中的一个,您就可以使用类似Jasmine jQuery的东西来加载您的装置
FWIW:我倾向于根据需要使用这些技术的组合。接受答案的第一部分的一个问题是每次实例化视图时都会编译模板。另一种方法是直接在视图的原型上设置模板:
app.TodoView = Backbone.View.extend({
initialize: function(){
if (!app.TodoView.prototype.template) {
app.TodoView.prototype.template = _.template($("#item-template").html());
}
}
});
这样,当TodoView
的第一个实例被实例化时,模板被编译一次。…我的代码块和格式出现了一些奇怪的情况
$(function(){
var myApp = MyApp();
new myApp.MyView();
// ...
});
describe("how this thing works", function(){
beforeEach(function(){
var myApp = MyApp();
this.view = new myApp.MyView();
// ...
});
});
app.TodoView = Backbone.View.extend({
initialize: function(){
if (!app.TodoView.prototype.template) {
app.TodoView.prototype.template = _.template($("#item-template").html());
}
}
});