我正在检查设备宽度并在菜单中显示一些选项。我需要在页面加载和调整大小时检查这一点。因为我需要以纵向和横向视图签入设备。
<script type="text/x-jsrender" id="option">
<ul class="dropdown-menu" role="menu">
{{if ~checkDevice()}}
<li>
<span class="btn"></span>
Show
</li>
{{/if}}
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$.views.helpers({
checkDevice: function () {
return window.innerWidth > 450;
}
});
});
这在加载时正常工作。如何在调整大小的条件下检查这个?
答案 0 :(得分:1)
在您的示例中,您在JsRender渲染期间调用checkDevice,因此除非您在窗口调整大小时触发渲染刷新,否则不会重新评估它,这对性能不利。
更好的方法是从窗口onResize事件中驱动可观察的width
或height
属性。
$(window).resize(function () {
$.observable(data).setProperty("width", window.innerWidth);
});
然后将模板绑定到width
或height
值。
这是一个有效的jsfiddle:https://jsfiddle.net/BorisMoore/nm6Ljxph/
使用
<script id="tmpl" type="text/x-jsrender">
Window width: {^{:width}}
<table><tbody>
{^{if width<400 }}
<tr><td>{{:first}}</td></tr><tr><td>{{:last}}</td></tr>
{{else}}
<tr><td>{{:first}}</td><td>{{:last}}</td></tr>
{{/if}}
</tbody></table>
</script>
您可以使用限制或去抖动来进一步提高性能。 jsfiddle有一个注释掉的debounce方法,你可以使用...
答案 1 :(得分:0)
您可以使用jQuery将事件绑定到窗口大小调整
$(window).resize(function(){
//Call the function here
});
});