Backbone.js,无法呈现视图

时间:2013-07-02 08:16:34

标签: javascript jquery backbone.js

我尝试组织一些这样的观点:

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

enter image description here

我是如何得到此错误的?如何解决?

1 个答案:

答案 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:

$el!

希望这对你有所帮助。