骨干木偶区域显示不渲染
Backbone Marionette Region show without render
是否可以
将已经渲染的视图放入主干木偶区域而不再次渲染?
例如:
region.show(myView); // This will call render on myView
我不希望该地区再次呈现我的视图。
如果我这样做:
region.attachView(myView); // This won't render myView, but it also won't show it
首先覆盖木偶 ItemView 构造函数并像这样渲染(如果你想在 CollectionView 和 CompositeView 中使用它,也会覆盖它们的这些方法):
var fnCons = Marionette.ItemView.prototype.constructor,
fnRender = Marionette.ItemView.prototype.render;
Marionette.ItemView.prototype.constructor = function(){
this.firstRender = true;
fnCons.apply(this,arguments);
}
Marionette.ItemView.prototype.render = function(){
this.firstRender = false;
fnRender.apply(this,arguments);
}
然后只需覆盖默认的 region#show,如果视图view.firstRender
为 true,则尚未渲染,必须渲染它,否则无需执行任何操作。
Marionette.Region.prototype.show = function(view){
this.ensureEl();
var isViewClosed = view.isClosed || _.isUndefined(view.$el);
var isDifferentView = view !== this.currentView;
if (isDifferentView) {
this.close();
}
// These lines changed from default marionette action
if(view.firstRender){
view.render();
}else{
// Don anything else!
}
// End of overrided code
if (isDifferentView || isViewClosed) {
this.open(view);
}
this.currentView = view;
Marionette.triggerMethod.call(this, "show", view);
Marionette.triggerMethod.call(view, "show");
}
编辑
上面的解决方案工作正常,另一种方法是(这将假设视图已呈现):
Marionette.Region.prototype.showWithoutRender = function(view){
this.ensureEl();
var isViewClosed = view.isClosed || _.isUndefined(view.$el);
var isDifferentView = view !== this.currentView;
if (view !== this.currentView) {
this.close();
}
if(isViewClosed || isDifferentView){
this.open(view);
}
this.currentView = view;
Marionette.triggerMethod.call(this, "show", view);
Marionette.triggerMethod.call(view, "show");
}
// assume your view is already rendered
region.ensureEl();
region.open(myView);
不建议这样做,如果可以的话,请使用region.show(myView)。由于它将关闭上一个视图以清理所有事件侦听器等......
相关文章:
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 延迟高亮显示文本区域中的文本
- 悬停时以矩形突出显示整个标签区域
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- 如何在谷歌地图中突出显示一个州点击一个国家的任何区域
- 如何在不使用iframe或库的情况下创建剪切显示窗口区域
- JavaScript 在更改选择时不显示文本区域
- 模式显示文本区域内容不是字符串
- JQuery/JavaScript - 突出显示输入或文本区域中的一部分文本
- 显示文本区域的多行纯文本
- 地图<区域>未显示背景图像
- 在文本区域显示未定义的javascript数组
- 如何在文本区域突出显示文本的一部分
- 缩小后的大图像上的Jcrop圆形选择显示预览选择区域中的全尺寸图像
- 如何简化 jQuery 代码以突出显示区域和链接
- Javascript 显示区域切换
- 突出显示<区域>
- 如何在谷歌地理地图可视化中显示区域
- 创建一个地图,在单击链接时高亮显示区域
- 浏览器显示区域的位置