0

我的示例 JSON 和 js:

function foo1(a) { return a*1.5;} //NOTE: foo1 accept one parameter
function foo2(a,b) { return a*1.5 + b;} //NOTE: foo2 accept two parameter
var arr=[ {func:foo1, para:[10]}, {func:foo2, para:[10,20]} ];

我的 jQuery 模板(不工作):

<script id="template1" type="text/x-jquery-tmpl">
        ${$item.data.func.apply(this,$item.data.para)}
</script>

调用模板:

 $('#template1').tmpl(arr).appendTo('#mycontainer');

我的问题:

  • 我有不同的函数接受不同数量的参数(我不能更改函数的参数#)
  • 所以我想传递'func'中的函数名和'para'中的参数(作为一个数组),并使用“apply”方法从jQuery模板内部调用该方法
  • 但是如果我在函数后使用 apply (如$item.data.func.apply)它会抛出“未定义”错误

更多观察(工作):

  • 如果我调用 $item.data.func(10) 或 $item.data.func(10,20) 之类的方法,它可以工作
  • 在我想调用该方法的地方typeof $item.data.func返回“函数”

请帮忙

4

1 回答 1

0

如果表达式是函数类型,则似乎是 jQuery 模板框架本身使用 apply 来调用。这使得事情阻止在 jQuery 模板中使用apply来调用方法。

所以这是我的技巧,它引入了一个通用的通用方法调用程序,例如

模板:

<script id="template1" type="text/x-jquery-tmpl">
    ${genericTrigger($item.data.func, $item.data.para)}
</script>

JS:

function genericTrigger(func, para) {
    // This need to check, as some unexpected call is coming to this 
    // without passing value
    if (typeof func != 'undefined' && typeof func == 'function') 
    {
       return func.apply(this, para);
    }
}


var arr=[ {func:foo1, para:[10]}, {func:foo2, para:[10,20]} ];
$('#template1').tmpl(arr).appendTo('#mycontainer');
于 2012-10-23T09:37:41.423 回答