我的网站的一部分出现了一个非常奇怪的错误,它是使用backbone.js,backbone.marionette构建的。我使用underscore.js作为REST框架的模板和tastypie。
Firebug输出“ReferenceError:xyz(未在下划线模板中<%= xyz%>)”。 (8个超出范围5)。
当我将其追溯到underscore-min.js文件时,它没有8行,因为它是一个min文件。这是可以预期的。
但是,我怀疑是语法错误,因为在控制台中手动操作变量可以正常工作。
我可以从REST框架手动定义名称模型提取,并在其视图中呈现它。我甚至可以使用MyApp.testSection.show(“渲染视图”)正确地将它输出到前端。没有任何问题。
我怀疑NameView模板中的语法有问题:_.template(...)section或MyApp.addInitializer
以下代码
Name = TastypieModel.extend({
urlRoot:'/api/v1/names/Calvin'
});
//returns an array {'name':'Calvin', 'age':32, etc....}
NameView = Backbone.Marionette.ItemView.extend({
model: Name,
template: _.template("<h1>My name is <%= name %></h1>"),
tagName: 'p',
initialize: function(){
this.bindTo(this.model, "change", this.render);
}
});
MyApp.addInitializer(function(options){
var name = new Name();
name.fetch();
var nameview = new NameView ({
model: name
});
MyApp.testSection.show(nameview);
});
答案 0 :(得分:2)
问题很可能是由您提取数据引起的。
model.fetch()
是一个异步操作,但您的代码并未考虑到这一点。您使用没有数据的模型渲染视图,因为在调用fetch
之后立即进行渲染,而不是等待获取模型。
MyApp.addInitializer(function(options){
var name = new Name();
var fetched = name.fetch();
// wait for the model to be fetched
$.when(fetched).then(function(){
var nameview = new NameView ({
model: name
});
MyApp.testSection.show(nameview);
});
});