Backbone:调用扩展视图的覆盖渲染()函数
Posted
技术标签:
【中文标题】Backbone:调用扩展视图的覆盖渲染()函数【英文标题】:Backbone: Call an extended view's overridden render() function 【发布时间】:2012-06-27 03:47:17 【问题描述】:我有一个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
);
);
谢谢!
【问题讨论】:
【参考方案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。以上是关于Backbone:调用扩展视图的覆盖渲染()函数的主要内容,如果未能解决你的问题,请参考以下文章