Backbone.js Underline.js-未定义xyz(范围5外的8个)
我的网站的一部分出现了一个非常奇怪的错误,它是用backbone.js、backbone.marionete构建的。我在模板中使用下划线.js,在REST框架中使用tastypie Firebug输出“ReferenceError:xyz(下划线模板中的位置)未定义”。(8超出范围5) 当我将其追溯到underline-min.js文件时,它没有8行,因为它是一个min文件。这是意料之中的 然而,我怀疑是语法错误,因为手动操作控制台中的变量可以正常工作 我可以从REST框架手动定义一个名称模型获取,并在其视图中呈现它。我甚至可以使用MyApp.testSection.show(“渲染视图”)将其正确地输出到前端,而不会出现任何问题 我怀疑NameView模板:u.template(…)部分或MyApp.addInitializer中的语法有问题 下面的代码Backbone.js Underline.js-未定义xyz(范围5外的8个),backbone.js,underscore.js,tastypie,marionette,Backbone.js,Underscore.js,Tastypie,Marionette,我的网站的一部分出现了一个非常奇怪的错误,它是用backbone.js、backbone.marionete构建的。我在模板中使用下划线.js,在REST框架中使用tastypie Firebug输出“ReferenceError:xyz(下划线模板中的位置)未定义”。(8超出范围5) 当我将其追溯到underline-min.js文件时,它没有8行,因为它是一个min文件。这是意料之中的 然而,我怀疑是语法错误,因为手动操作控制台中的变量可以正常工作 我可以从REST框架手动定义一个名称模型获
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);
});
Name=tastypemodel.extend({
urlRoot:“/api/v1/names/Calvin”
});
//返回一个数组{'name':'Calvin','age':32等..}
NameView=Backbone.marionete.ItemView.extend({
型号:姓名,
模板:uu.template(“我的名字是”),
标记名:“p”,
初始化:函数(){
this.bindTo(this.model,“change”,this.render);
}
});
MyApp.addInitializer(函数(选项){
var name=新名称();
name.fetch();
var nameview=新的nameview({
型号:姓名
});
MyApp.testSection.show(nameview);
});
问题很可能是由您获取数据引起的
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);
});
});
在fetch方法的成功回调中创建并显示视图。由于它是一个异步调用,因此可能正在创建问题SmartionNet使用下划线作为编译模板的默认值。因此您可以避免这样做。您的模板声明看起来很好。渲染方法在哪里?testSection.show()做什么?在render方法中,确保模型在传递到模板中时正在调用.toJSON(),因为主干模型属性实际上存储在model.attributes中。使用Marionette.async可以吗?我还希望在单页应用程序上显示其他信息,在发生更改时,我希望将这些信息呈现为“实时”。不要使用marionete.async。它已经过时,不再维护。您需要的只是模型上的事件处理程序。收听“更改”事件并根据需要更新DOM。谢谢!顺便说一句,我喜欢木偶。