我尝试组织一些这样的观点:
define([
// Application.
"app"
],
function(app) {
var Partials = app.module();
Partials.classes = {
'AccountNavStart' : AccountNavStart = Backbone.View.extend({
template: 'member/account-nav',
serialize: function(){
return { model: this.model };
}
});
// Required, return the module for AMD compliance.
return Partials;
});
渲染:
new Popover.Views.Default({
content: new Partials.classes['AccountNavStart']().render().$el
});
但是我收到错误:
Uncaught TypeError: Cannot call method 'get' of undefined
我是如何得到此错误的?如何解决?
答案 0 :(得分:3)
试试这个:
编辑:这是一个Backbone Boilerplate应用程序,所以我更新了答案:
问题是如何在渲染后获取视图的“部分”模块的$ el。 我尝试定义一个模块并声明一个Backbone视图作为其成员。然后我创建一个视图实例,然后通过view.render()。$ el链接方法调用。它成功获得了视图的$ el,因为在Backbone Boilerplate中render()具有默认行为。本机骨干渲染功能旨在被覆盖。
我的简单例子:
模块声明(模块/用户):
define(["app"],
function(app){
var User = app.module();
User.Views.Item = Backbone.View.extend({
template: "user/item",
tagName: "li",
serialize: function(){
return {model: this.model};
},
initialize: function(){
this.listenTo(this.model, "change", this.render);
}
});
return User;
});
项目模板(templates / user / item.html)
<a href="#"><%=model.get("name")%></a>
尝试在路由器初始化调用中获取视图的$ el
define([
// Application.
"app","modules/user"
],
function(app, User) {
// Defining the application router, you can attach sub routers here.
var Router = Backbone.Router.extend({
initialize: function(){
app.useLayout("main-layout").setViews({
".users":new User.Views.Item({model:new Backbone.Model({"name":"cccc"})})
}).render();
//try to access $el. it works
console.log(new User.Views.Item({model:new Backbone.Model({"name":"cccc"})}).render().$el);
},
routes: {
"": "index",
"user/:name":"user"
},
index: function() {
},
user: function(){
}
});
return Router;
});
最后我得到了$ el:
希望这对你有所帮助。