Backbone: 调用扩展视图的重写render()函数

6

我有一个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
        });
    }
});

谢谢!

3个回答

14
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 没有提供一种简单的方式来调用父级原型链上同名的函数。如果你要重写一个核心函数,比如 set 或 save,并且想要调用父对象的实现,你需要显式地调用它,类似这样:

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


7

您应该能够使用

ExerciseRowView.prototype.render.call(this)

这将使用当前模型作为作用域,调用ExerciseRowView的渲染功能。

1
this.constructor.__super__.render.call(this,{});

1
根据 Github 上的帖子,不应使用 __super__。 - Jason M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接