带有 JSViews 事件绑定的 JSRender 与全局辅助函数抛出错误 e.apply 不是函数
JSRender with JSViews event binding with global helper function throws error e.apply is not a function
当我尝试执行一个事件绑定调用一个接受 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}}%</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}}%</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}}%</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}}%</small>
{{/if}}
</h2>
</div>
</div>
这是浏览器检查的堆栈跟踪:
类型错误
列数:2959
文件名:“http://cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js”
行号:3
消息:"e.apply is not a function"...
这是什么原因造成的?
您使用的版本不兼容:
<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
最好删除此问题,因为它可能对其他人没有帮助或适用。
当我尝试执行一个事件绑定调用一个接受 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}}%</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}}%</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}}%</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}}%</small>
{{/if}}
</h2>
</div>
</div>
这是浏览器检查的堆栈跟踪:
类型错误 列数:2959 文件名:“http://cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js” 行号:3 消息:"e.apply is not a function"...
这是什么原因造成的?
您使用的版本不兼容:
<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
最好删除此问题,因为它可能对其他人没有帮助或适用。