JSRender与JSViews事件绑定与全局帮助函数抛出错误e.apply不是一个函数

时间:2018-03-09 05:27:36

标签: javascript jquery jsrender jsviews

当我尝试执行一个调用全局辅助函数并接受3个参数的事件绑定时,会抛出一个TypeError,说明e.apply不是函数。功能不会受到影响,但html无法正确呈现(在调用呈现为纯文本后的hrefs)。

我的简化代码如下:

<script type="application/javascript">
$(document).ready(function () {
    $.views.helpers({
        rapidClick: function(chip, petName, owner, ev, eventArgs) {
            console.log('Data for RapidAlert: ' + chip + ', ' + petName + ', ' + ownerCell);
        }
    });
});

<script id="matchTempl" type="text/x-jsrender">
<div class="panel panel-default">
    <div class="panel-heading">

        <h2 class="panel-title"><span class="x-chip" data-link="html{:~diff(chip)}"></span>
        {{if ~token && pet}}
            <div class="pull-right">
                <small style="margin-right: 30px">{{:weight}}&percnt;</small>
                <button class="btn btn-xs btn-danger" data-link="{on 'click' ~rapidClick chip pet.name owner}">Send RapidAlert</button>
            </div>
        {{else}}
            <small class="pull-right" style="margin-right: 10px">{{:weight}}&percnt;</small>
        {{/if}}
        </h2>

    </div>

</div>

<script id="matchTempl" type="text/x-jsrender">
<div class="panel panel-default">
    <div class="panel-heading">

        <h2 class="panel-title"><span class="x-chip" data-link="html{:~diff(chip)}"></span>
        {{if ~token && pet}}
            <div class="pull-right">
                <small style="margin-right: 30px">{{:weight}}&percnt;</small>
                <button class="btn btn-xs btn-danger" data-link="{on 'click' ~rapidClick chip pet.name owner}">Send RapidAlert</button> //If I remove this line, the error is not thrown
            </div>
        {{else}}
            <small class="pull-right" style="margin-right: 10px">{{:weight}}&percnt;</small>
        {{/if}}
        </h2>

    </div>

</div>

这是浏览器检查的堆栈跟踪:

类型错误 columnNumber:2959 fileName:“http://cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js” lineNumber:3 消息:“e.apply不是函数”......

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

您使用的是不兼容的版本:

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jquery.observable.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jquery.views.min.js"></script>

显然你需要为每个版本使用相同的版本,或者只使用一个jsviews.js文件。

http://www.jsviews.com/#download

最好删除此问题,因为它可能没有帮助或适用于其他人。