marionette 渲染视图未按预期工作
marionette render view is not working as expected
我写了一个有两个视图的简单应用程序,第一个视图加载 google 搜索引擎 ui。
我有两条路线,搜索路线和回家路线,我第一次加载搜索路线,效果很好,但是当我改变路线和回家再回到搜索路线时,搜索视图会不工作。
搜索查看代码:
var SearchView = Marionette.View.extend({
template: "#search-template",
onRender: function() {
var cx = '010767762450613121260:fzszywg7ozm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = this.$el.find("#googleResult")[0];
s.prepend(gcse);
},
events: {
'click button': 'doSearch'
},
doSearch: function(e) {
var input = document.getElementById('search-box-id');
var element = google.search.cse.element.getElement('searchresults-only0');
if (input.value == '') {
element.clearAllResults();
} else {
element.execute(input.value);
}
log("Search for ");
}
});
这是代码:
https://jsfiddle.net/kk266551/29/
谢谢。
我安慰我得到这样的错误:
Uncaught TypeError: Cannot read property 'execute' of null
at n.doSearch ((index):127)
这一行:element.execute(input.value);
这意味着它在下一次渲染时没有找到元素 searchresults-only0
。
下一个渲染元素的名称应该是 searchresults-only1
等等。
我厌倦了通过提供 gname https://developers.google.com/custom-search/docs/element#gname 并通过它搜索元素来解决这个问题,但它也没有用。
最后我发现问题是在每次渲染时 Google 脚本被重新加载并与自身冲突。
这就是我在您的脚本中所做的,使它按预期工作:
<gcse:searchresults-only gname="other"></gcse:searchresults-only>
onRender: function() {
// check if Google script was loaded at least once
if(!window.google) {
var cx = '010767762450613121260:fzszywg7ozm';
// saving gcse to global object
var gcse = window.gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
}
var s = this.$el.find(".googleResult").last();
s.prepend(window.gcse);
},
doSearch: function(e) {
var input = document.getElementById('search-box-id');
var element = google.search.cse.element.getElement('other');
if (input.value == '') {
element.clearAllResults();
} else {
element.execute(input.value);
}
log("Search for ");
}
你欠街上某个无家可归的人几块钱。
我写了一个有两个视图的简单应用程序,第一个视图加载 google 搜索引擎 ui。
我有两条路线,搜索路线和回家路线,我第一次加载搜索路线,效果很好,但是当我改变路线和回家再回到搜索路线时,搜索视图会不工作。
搜索查看代码:
var SearchView = Marionette.View.extend({
template: "#search-template",
onRender: function() {
var cx = '010767762450613121260:fzszywg7ozm';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = this.$el.find("#googleResult")[0];
s.prepend(gcse);
},
events: {
'click button': 'doSearch'
},
doSearch: function(e) {
var input = document.getElementById('search-box-id');
var element = google.search.cse.element.getElement('searchresults-only0');
if (input.value == '') {
element.clearAllResults();
} else {
element.execute(input.value);
}
log("Search for ");
}
});
这是代码: https://jsfiddle.net/kk266551/29/
谢谢。
我安慰我得到这样的错误:
Uncaught TypeError: Cannot read property 'execute' of null
at n.doSearch ((index):127)
这一行:element.execute(input.value);
这意味着它在下一次渲染时没有找到元素 searchresults-only0
。
下一个渲染元素的名称应该是 searchresults-only1
等等。
我厌倦了通过提供 gname https://developers.google.com/custom-search/docs/element#gname 并通过它搜索元素来解决这个问题,但它也没有用。
最后我发现问题是在每次渲染时 Google 脚本被重新加载并与自身冲突。
这就是我在您的脚本中所做的,使它按预期工作:
<gcse:searchresults-only gname="other"></gcse:searchresults-only>
onRender: function() {
// check if Google script was loaded at least once
if(!window.google) {
var cx = '010767762450613121260:fzszywg7ozm';
// saving gcse to global object
var gcse = window.gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
}
var s = this.$el.find(".googleResult").last();
s.prepend(window.gcse);
},
doSearch: function(e) {
var input = document.getElementById('search-box-id');
var element = google.search.cse.element.getElement('other');
if (input.value == '') {
element.clearAllResults();
} else {
element.execute(input.value);
}
log("Search for ");
}
你欠街上某个无家可归的人几块钱。