Backbone 异步视图示例化

o75abkj4  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(155)

我需要这样做:

new app.view().done(function() {})

这是因为我在initialize函数中异步设置视图元素,并且我需要在示例化之后立即使用该元素。
如果我这样做,它就不起作用:

var view = new app.view();
var $el = view.$el;

因为视图元素还没有准备好。
同样,我需要这样的东西:

new app.view().done(function(view) {
    var $el = view.$el;
})

但是我找不到任何方法来完成这个任务。重写构造函数是否会帮助我完成这个任务?

bcs8qyzn

bcs8qyzn1#

选项1 - * Backbone.js .事件 * -example

您可以在异步创建$el之后触发一个事件,如下所示:

app.view = Backbone.view.extend({
    initialize: function ()
    {
        // async setup the $el and then do the following after it is created
        this.trigger('el:created', this.$el);
    }
});

然后,所有其他视图都可以侦听此事件并相应地执行操作:

app.anotherView = Backbone.view.extend({
    initialize: function ()
    {
        var otherView = new app.view();

        // Only fires once so only listen once
        this.listenToOnce(otherView, 'el:created', this.createEl);
    },

    createEl: function ($el)
    {
        //do something with $el here
    }
});

选项2 - *jQuery.延迟 * -example

app.view = Backbone.view.extend({
    initialize: function ()
    {
        this.elCreation = $.Deferred();

        // async setup the $el and then do the following after it is created
        this.elCreation.resolve(this.$el);
    }
});

new app.view().elCreation.done(function($el)
{
    //do something with $el here
});

相关问题