Вы можете отложить селектор jQuery, пока он вам не понадобится:
render: function(){
var templateHtml = $(this.template).html();
_.template(templateHtml);
}
Или вы можете запустить селектор, когда представление инициализируется:
initialize: function(){
this.template = _.template($(this.template).html());
}
Или, если вы действительно хотитеоставьте свой код как есть и оцените селектор при определении представления, вы можете обернуть весь код Backbone в функцию, которую вы вызываете, когда хотите инициализировать весь код приложения ... такой как jQuery $(function(){}
функция на вашей реальной HTML-странице или beforeEach
функция в ваших тестах Jasmine:
<code>MyApp = (function(){
var myApp = {};</p>
<p>myApp.MyView = Backbone.View.extend({
template: _.template($("#item-template").html())
// ...
});</p>
<p>return myApp;
});
Затем в вашем приложении, чтобы запустить это:
$(function(){
var myApp = MyApp();
new myApp.MyView();
// ...
});
И в вашем тесте Jasmine:
describe("how this thing works", function(){
beforeEach(function(){
var myApp = MyApp();
this.view = new myApp.MyView();
// ...
});
});
Если у вас есть одно из этих решений, вы можете использовать что-то вроде Jasmine-jQuery для загрузки ваших приборов.
FWIW: Я склонен использовать комбинацию этих техник по мере необходимости.