javascript - Backbone.js,无法渲染 View

标签 javascript jquery backbone.js

我尝试组织一些这样的 View :

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

有什么想法我会收到此错误吗?如何解决?

最佳答案

试试这个:

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

问题是如何在渲染后获取 View 的“Partials”模块的 $el 。 我尝试定义一个模块并声明一个 Backbone View 作为其成员。然后我创建一个 View 实例,然后通过 view.render().$el 链接方法调用。它成功获取 View 的 $el ,因为在 Backbone Boilerplate 中 render() 有其默认行为。 native Backbone 渲染函数被设计为可被覆盖。

我的简单例子:

模块声明(模块/用户):

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>

尝试在 Router 初始化调用中获取 View 的 $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!

希望这对您有帮助。

关于javascript - Backbone.js,无法渲染 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420655/

相关文章:

javascript - 在 Backbone 中表示任意深度嵌套列表的最简单方法

javascript - 如何在chrome浏览器扩展中执行javascript

Javascript setTimeout 失火

javascript - 通过 CollectionView (Marionette/Backbone) 传递布局(和操作区域)

c# - ServiceStack Backbone.Todos 不允许删除 405

javascript - 指定/更改主干集合的端口以指向 couchdb 服务器

javascript - Google Apps 脚本为 getLastRow 抛出电子邮件失败通知,我做错了什么?

jquery - 如何阻止 div 在单击提交按钮时隐藏?

javascript - 验证文本区域输入的字母数字值

javascript - 从 Marionette 中的 emptyView 添加到收藏夹