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テンプレート内からメソッドを呼び出したい
  • しかし、関数の後に適用を使用した場合 ( $item.data.func.apply など)、「未定義」エラーがスローされます

より多くの観察(作業中):

  • $item.data.func(10) または $item.data.func(10,20) のようなメソッドを呼び出した場合、動作します
  • メソッドを呼び出したい時点でtypeof $item.data.func「関数」が返されます

助けてください

4

1 に答える 1

0

式が関数型の場合、jQuery Template フレームワーク自体が 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 に答える