动态调用模块模式中的公共方法

时间:2016-09-06 10:19:07

标签: javascript design-patterns module kendo-grid

我在我的网页中使用了具有模块模式的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范围内包装模板函数?

0 个答案:

没有答案