javascript - 在加载和调整大小时调用 jsRender 方法

标签 javascript jquery html jsrender jsviews

我正在检查设备宽度并在菜单中显示一些选项。我需要在页面加载和调整大小时检查这一点。因为我需要以纵向和横向 View checkin 设备。

<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;
        }
    });
});

这在加载时可以正常工作。如何检查调整大小的条件?

最佳答案

在您的示例中,您在 JsRender 渲染期间调用 checkDevice,因此它不会被重新评估,除非您在窗口调整大小时触发渲染刷新,这对性能不利。

更好的方法是从窗口 onResize 事件驱动可观察的 widthheight 属性。

$(window).resize(function () {
  $.observable(data).setProperty("width", window.innerWidth);
});

然后将模板绑定(bind)到宽度高度值。

这是一个工作中的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 有一个注释掉的去抖方法,您可以使用...

关于javascript - 在加载和调整大小时调用 jsRender 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37744403/

相关文章:

html - 推荐用于flex项目的as3中的html解析器库

html - 使用 <audio> 标签尝试在 Firefox 上流式传输 m3u8 时出现问题

javascript - 在数组中查找重复对象并标记这些 [Javascript lodash]

jquery - 每当我单击文本区域时页面就会刷新,不允许我填写任何文本

javascript - 使用 MySQL、PHP 和 AngularJS 的服务器端分页

javascript - jquery/javascript代码获取网页主页面的全文内容(包括链接文本,不包括图片)

php - jQuery/PHP 用于顶部通知栏,将所有页面内容向下推

html - 如何处理我的导航栏以使其看起来像图片中的那样?

javascript - 在 Perl-CGI 生成的页面中包含 JavaScript

javascript - 如何向定义的日期添加天数