模板渲染上的Backbone Underscore错误:Uncaught TypeError:Object#<object>没有方法'get'</object>

时间:2013-08-15 20:32:12

标签: templates backbone.js underscore.js

在下面的render方法的console.log行中,它显示this.member实例正是应该的样子。所以成员对象很好。我在tpl中吐出了字符串,它应该是什么。那么是什么导致了主题标题中的错误?

附加信息:此视图是父级呈现的子视图。我正在使用Backbone.Subviews

非常感谢你的帮助。我正在转动轮子: - /

这是我的代码......

编辑:更改了成员对象attrib引用,现在它可以正常工作......

模板...

<div class="wrap-profile container">
    <div class="profile-pic">
        <div class="pic">
            <img src="<%= pathUploads %><%= member.photo_profile %>" width="400" height="600" id="<%= member.id %>" class="photo-img">
        </div>      
    </div>
    <div class="profile-info">
        <div>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur urna nec erat pretium tempus.
        </div>  
        <div>
            Morbi nec arcu at leo lobortis egestas. Phasellus sagittis neque dolor, ut congue lorem egestas id.m laoreet, vitae tristique lorem sollicitudin.
        </div>  
        <div>
            In vel libero eget enim rhoncus suscipit. Nunc tristique in nisi eget bibendum. Mauris et pulvinar orci.
        </div>  
        <div>
            Quisque eget sem id dolor tempus dictum. Pellentesque luctus scelerisque lacinia.
        </div>  
        <div>
            Sed gravida rutrum bibendum. Aenean condimentum eu dui nec adipiscing. Duis sagittis pharetra enim.
        </div>  
    </div>
</div>

视图js ...

// ProfileView.js

define( function(require) {

    "use strict";

    var $                   = require('jquery'),
        _                   = require('underscore'), 
        Backbone            = require('backbone'), 
        Helper              = require('helper'), 
        tpl                 = require('text!templates/profilePicTemplate.html'),

        template            = _.template(tpl);

    return Backbone.View.extend({

        el: $("#profile"),

        initialize: function(member) {
            var self = this;
            this.member = member;
        },

        render: function() {
            var data = {
                pathUploads: Helper.global.pathUploads, 
                member: this.member 
            };
            console.log(this.member);
            this.$el.html(template(data));
            return this;
        },

        destroy: function() {
            template = null
            this.member = null;
        }

    });

});

1 个答案:

答案 0 :(得分:3)

证据直接指出this.member是一个普通的旧javascript对象,而不是Backbone.Model子类的实例。你似乎意识到了这一点,所以我认为这是一个“不是真的,现在听我们,后来相信我们”的案例。要测试这个理论,请交换此片段。

var data = {
  pathUploads: Helper.global.pathUploads, 
  member: new Backbone.Model(this.member) 
};

如果能解决这个问题,理论就成立了。


(除了...)

对于它的价值,让你的模板需要骨干模型实例而不是普通数据可能是劣等的,所以考虑让你的模板做<%= member.photo_profile %>而不是因为它不关心数据来自何处。这也使得使用演示者设计模式变得更容易。您可以在视图中使用member.toJSON()来获取普通数据属性以传入模板。