Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 茉莉花的模板测试_Templates_Backbone.js_Bdd_Jasmine_Jasmine Jquery - Fatal编程技术网

Templates 茉莉花的模板测试

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

我正在尝试使用Jasmine(带有yaml配置的gem)来测试Backbone.js应用程序。我正在使用下划线模板,就像

我的问题是,我无法在模型/视图之前加载模板,因此模板调用会导致这些类在加载时出错

我读过关于jasmine jquery插件来制作装置的文章,但问题是我的src文件(模型/视图)在得到规范文件并能够设置所需装置之前就被加载并失败了


如何尽早加载模板,使其可用于重置我的类?

您可以延迟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());
        }
    }            
});