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

Gar*_*ett 6 javascript overriding view backbone.js

我有一个WorkoutExerciseRowView延伸ExerciseRowView.渲染函数非常相似,只是WorkoutExerciseRowView必须在ExerciseRowView渲染中添加一些参数.如何ExerciseRowView在渲染函数中调用WorkoutExerciseRowView渲染函数?

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
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢!

sol*_*oth 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
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

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

简要介绍一下super:JavaScript没有提供一种调用super的简单方法 - 在原型链上定义的同名函数更高.如果覆盖像set或save这样的核心函数,并且想要调用父对象的实现,则必须按以下方式显式调用它:

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


小智 7

你应该可以使用

ExerciseRowView.prototype.render.call(this)
Run Code Online (Sandbox Code Playgroud)

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