在 window 调整大小时更改 Backbone 视图模板
Change Backbone view template on window resize
我想在 window 调整大小时更改视图模板,以使其响应。这在重新加载页面时工作正常,但我无法动态更新模板。根据文档,我使用它在页面加载时设置模板:
getTemplate: function() {
if ($(window).width() > 1024){
this.desktopLayout = true;
return '#MenuView';
} else {
this.desktopLayout = false;
return '#MenuViewTablet';
}
},
当您导航到该页面时,这可以正常工作,但是当在 'resize' 上调用该函数时,它不会更新模板。
这里的最终答案是使用Backbone的listenTo函数来监听window调整大小事件,在该事件回调中进行更改,然后确保调用渲染以重新渲染视图。
使用 Backbone 更改应用程序的 HTML 结构时最关键的步骤和 最常见的错误 不是调用渲染 。如果您在 Backbone 之上使用类似 Marionette 的内容,在某些情况下,您的视图将在进行此类更改时自动重新呈现。
在你的ItemView
中:
onShow : function () {
$(window).on("resize.myNamespace", _.throttle(_.bind(this.render, this), 50));
},
onClose : function () {
$(window).off("resize.myNamespace");
}
- 侦听 window 调整大小事件
- 限制渲染调用,因为调整大小事件的触发速度非常快
- 为渲染调用绑定
this
参考
- 调整大小时重新渲染视图; (渲染器将再次调用
getTemplate
)
- 使用
onShow
事件,以便绑定仅在视图插入 DOM 后发生
- 清除
onClose
事件中的侦听器以防止以后出现错误,命名空间以防止与其他代码发生冲突。
我想在 window 调整大小时更改视图模板,以使其响应。这在重新加载页面时工作正常,但我无法动态更新模板。根据文档,我使用它在页面加载时设置模板:
getTemplate: function() {
if ($(window).width() > 1024){
this.desktopLayout = true;
return '#MenuView';
} else {
this.desktopLayout = false;
return '#MenuViewTablet';
}
},
当您导航到该页面时,这可以正常工作,但是当在 'resize' 上调用该函数时,它不会更新模板。
这里的最终答案是使用Backbone的listenTo函数来监听window调整大小事件,在该事件回调中进行更改,然后确保调用渲染以重新渲染视图。
使用 Backbone 更改应用程序的 HTML 结构时最关键的步骤和 最常见的错误 不是调用渲染 。如果您在 Backbone 之上使用类似 Marionette 的内容,在某些情况下,您的视图将在进行此类更改时自动重新呈现。
在你的ItemView
中:
onShow : function () {
$(window).on("resize.myNamespace", _.throttle(_.bind(this.render, this), 50));
},
onClose : function () {
$(window).off("resize.myNamespace");
}
- 侦听 window 调整大小事件
- 限制渲染调用,因为调整大小事件的触发速度非常快
- 为渲染调用绑定
this
参考 - 调整大小时重新渲染视图; (渲染器将再次调用
getTemplate
) - 使用
onShow
事件,以便绑定仅在视图插入 DOM 后发生
- 清除
onClose
事件中的侦听器以防止以后出现错误,命名空间以防止与其他代码发生冲突。