无法创建Backbone View的新实例

时间:2012-08-28 23:42:19

标签: javascript oop backbone.js multiple-instances backbone-views

我有一个“主”视图,如果你愿意,可以通过loadView方法加载其他视图。我的问题是这些视图类执行一些初始化逻辑(在initialize中),只能执行一次(与模板有关)。但是,如果我尝试多次实例化这些类,我会在同一个实例上调用initialize时出现错误症状。

我已经尝试在控制台中通过加载类并使用var x = new MyViewClass();创建两个新实例来单独实例化它们,但每次第一个实例化时,第二个实例失败,因为模板已导致此错误被初始化。

这真的不应该发生,但我不能为我的生活看到导致问题的原因。

布局的加载代码如下。

loadView: function(name, bootstrap_function) {
    this.unloadView();

    var _class  = require('View/'+name),                // Let's load the view file
        pretty  = name.replace('/', ''),                // Prettify the name by removing slashes (should end up with some camelcased niceness)
        bs_name = '__bootstrap'+pretty,                 // Generate the name of the bootstrap function
        view    = new _class();                         // Pass the event aggregator in

    // If there is a bootstrap function, bootstrap
    if(typeOf(bootstrap_function) == 'function') {      // Check if one has been passed in
        bootstrap_function.call(this, view);            // Bootstrap: function(AppView, LoadedView)
    }

    this._loaded = view;                                // Store the view in _loaded

    // Now that we have a view to play with
    // we should insert it into our container object
    view.$el.appendTo(this.$container);

    // And render!
    view.render();
},

unloadView: function() {
    if(this._loaded !== null) {
        this._loaded.remove();
        this._loaded.unbind();
        this._loaded = null;
    }
}

修改

出现错误的模板代码是:

processTemplates: function() {
    if(this.templates === undefined) return this;

    console.log(this.templates);

    if(Object.getLength(this.templates) > 0) {
        Object.each(this.templates, function(template, name) {
            this.templates[name] = _.template(template);
        }, this);
    }

    return this;
},

console.log(this.templates)输出显示在第一次初始化时,this.templates包含字符串,但应在第二次初始化时显示模板函数(仅在processTemplates()之后才会出现这种情况被称为。

我想知道它是否与我的类的定义方式有关,例如:

define(
    ['backbone', 'View/Kords', 'text!Template/Pages/Landing.html', 'Collection/TenantTypes'],
    function(Backbone, KordsView, landing_html, TenantTypesCollection) {
        var LandingView = KordsView.extend({
            tagName: 'div',
            className: 'tiled-light',

            templates: {
                'main': landing_html
            },

landing_html在类中定义如下,但是可能存在引用问题吗? _.template不应该影响范围内landing_html的值,是吗?

编辑#2

与landing_html的引用无关。我尝试将templates.main设置为类定义中的字符串,但我仍然像以前一样得到错误。

0 个答案:

没有答案