【问题标题】:Backbone.js, cannot render viewBackbone.js,无法渲染视图
【发布时间】:2013-07-02 08:16:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jquery backbone.js


    【解决方案1】:

    试试这个:

    编辑:这是一个 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>
    

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

    希望对你有帮助。

    【讨论】:

    • 好点:backbonejs.org/#View-render "一个好的约定是在渲染结束时返回它以启用链式调用。"
    • 好的,错误消失了,但是现在它不渲染模板,而只是一个空的 div。任何想法为什么?触发了渲染,但它不渲染模板
    • 我已经修改了渲染函数将从模型数据中渲染视图模板的答案。
    • 我收到一个错误 Uncaught TypeError: Cannot read property 'attributes' of undefined
    • 答案已更新。您必须在启动主干视图时分配模型。
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多