这是我的问题,我有一个index.html页面,它明确地加载了reCAPTCHA脚本:
<form id="payment-<%= model.Id %>" class="form" action="" method="POST">
...
<div class="captcha-container"></div> //not being used yet
</form>
我有一个包含reCAPTCHA容器元素(div)的模板:
'use strict';
var Backbone = require('Backbone');
var Validation = require('backbone-validation');
Backbone.Validation = Validation;
Backbone.$ = $;
module.exports = BaseView.extend({
events: {},
formView: null,
initialize: function (options) {
var loadCaptcha = function() {
window.alert('captcha is ready');
};
},
render: function () {
// renders view using my form template
}
});
我有一个骨干视图,它将模板注入index.thml:
a
此时我甚至无法触发回调函数(loadCaptcha),我怀疑问题在于加载顺序,索引页面是否加载以及&#34; onload = loadCaptcha&#34 ;事件发生在骨干视图初始化之前。我试过删除&#34; async&#34;来自脚本标签的属性,但没有运气。有关如何使其工作的任何想法?
答案 0 :(得分:2)
我通过直接从呈现它的视图中拉回recaptcha脚本来找出解决方案。希望这可以帮助将来的某个人。
loadCaptcha: function() {
var self = this;
var getRecaptchaResponse = function(response) {
self.captchaResponse = response;
};
var renderCaptcha = function() {
self.captchaWidgetId = grecaptcha.render('recaptcha-container-' + self.model.get('Id'), {
sitekey : service.settings.recaptchaSiteKey,
callback: getRecaptchaResponse
});
};
window.renderCaptcha = renderCaptcha;
$.getScript('https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit', function() {});
},
答案 1 :(得分:0)
我会将您的captch脚本放在骨干视图中。然后将它放在主视图的渲染中。就像它是模块化的一样,你有一个主视图和一个子视图,其中包含在渲染主视图时加载的验证码。