0

我尝试组织一些这样的视图:

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

在此处输入图像描述

任何想法我如何得到这个错误?如何解决?

4

1 回答 1

3

试试这个:

编辑:这是一个 Backbone Boilerplate 应用程序,所以我更新了答案:

问题是如何在渲染后获取视图的“Partials”模块的$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:

美元!

希望这对你有帮助。

于 2013-07-02T09:10:07.800 回答