【问题标题】:Backbone: Call an extended view's overridden render() functionBackbone:调用扩展视图的覆盖渲染()函数
【发布时间】:2023-03-11 15:05:01
【问题描述】:

我有一个WorkoutExerciseRowView,它扩展了ExerciseRowView。渲染函数非常相似,除了WorkoutExerciseRowView 必须在ExerciseRowView 的渲染中添加一些参数。如何在WorkoutExerciseRowView的渲染函数中调用ExerciseRowView的渲染函数?

var WorkoutExerciseRowView = ExerciseRowView.extend( {      
    render : function() {
        //return this.constructor.render({ // doesn't work
        return this.render({ // doesn't work
            workoutExercise : this.model,
            exercise : this.model.get("exercise"),
            workoutSection : this.model.get("section"),
            isEditable : true,
            number : this.number,
            WorkoutExercise : WorkoutExercise,
            WorkoutSection : WorkoutSection
        });
    }
});

谢谢!

【问题讨论】:

    标签: javascript view backbone.js overriding


    【解决方案1】:
    var WorkoutExerciseRowView = ExerciseRowView.extend( {      
        render : function() {
            return ExerciseRowView.prototype.render.call(this,{
                workoutExercise : this.model,
                exercise : this.model.get("exercise"),
                workoutSection : this.model.get("section"),
                isEditable : true,
                number : this.number,
                WorkoutExercise : WorkoutExercise,
                WorkoutSection : WorkoutSection
            });
        }
    });
    

    来自 Backbone 的文档:http://backbonejs.org/#Model-extend

    关于 super 的简要说明:JavaScript 没有提供简单的调用方式 super — 在原型上定义的同名函数 链。如果你重写了一个核心函数,比如 set 或 save,并且你想要 要调用父对象的实现,您必须 按照以下思路明确调用它:

    Backbone.Model.prototype.set.call(this, attributes, options);

    【讨论】:

      【解决方案2】:

      你应该可以使用

      ExerciseRowView.prototype.render.call(this)
      

      这将从ExerciseRowView调用渲染函数,范围设置为this(当前模型)

      【讨论】:

        【解决方案3】:
        this.constructor.__super__.render.call(this,{});
        

        【讨论】:

        • 根据github上的帖子,不应该使用super
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 2012-05-18
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        相关资源
        最近更新 更多