我在我的网页中使用了具有模块模式的kendo网格,如下所示:
var foo = (function(){
function f1(){
//do something
}
function buildTemplate(sourcecolumn){
if(sourcecolumn) { //..return a span with formatting }
else //..return a span with source column as inner text
}
function buildGrid(){
//1. setup for grid
//.. add datasource to fetch records from db
//2. build columns
//..foreach over columns and send the template function
var columns = [];
for(i = 0; i<10; i++){
columns.push({
template: '#= buildTemplate(colname) #',
width: 50
});
}
}
return {
init: function(){
//..bind click events
}
}
})();
$(document).ready(foo.init);
当我运行会触发buildGrid()
方法的页面时,浏览器控制台显示buildTemplate()
未定义。因为buildGrid
稍后在单击按钮时执行,buildTemplate()
不是要执行的公共函数。
目前我已将buildTemplate()移到IIFE范围之外,以便该函数已执行且网格能够显示值。但是,我不希望将buildTemplate函数公开为public。
我是否仍然可以通过事先执行将buildTemplate()
方法封装在IIFE范围内?
修改
这是fiddle,它实际上与模块模式绑定了kendo网格。由于Simple
函数位于foo范围内,因此网格不会显示任何数据。如果将简单函数移动到范围之外的kendo网格中的data is shown。
是否可以在foo
范围内包装模板函数?