jQuery Template - 在模板中执行JS代码

时间:2011-01-19 07:41:26

标签: jquery jquery-templates

我正在尝试了解有关jQuery模板的更多信息,但似乎无法在模板中执行任何JS调用。

<script id="log-item" type="text/x-jquery-tmpl">
 {{if title.length }}
   <h3 style="padding-bottom:5px;">${ title }</h3>
 {{/if}}
 objectToString(${ detail });
</script>

请注意,我的objectToString()函数永远不会被调用,只是呈现为字符串。我试着把它包裹在{{}}中,但是没有运气。那里有谁可以提供帮助?

2 个答案:

答案 0 :(得分:8)

安东尼,你可以。您的调用方法需要在模板标记内,如下所示:

<script id="log-item" type="text/x-jquery-tmpl">
 {{if title.length }}
   <h3 style="padding-bottom:5px;">${ title }</h3>
 {{/if}}
 <p>
    Detail: ${ objectToString( detail ) }
 </p>
</script>

答案 1 :(得分:2)

我不确定您的objectToString位于何处,但如果您看到引用here,您会看到它们将必要的辅助函数添加到.tmpl(方法)中。

这是一个例子......我试图让它与问题中的内容类似......

<!DOCTYPE html> 
<html> 
<head> 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
  <title>Test jquery Templates</title> 
  <script type='text/javascript' src='http://code.jquery.com/jquery-1.4.4.min.js'></script> 
  <script type='text/javascript' src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script> 
</head> 
<body> 
  <script id="testTemplate" type="text/x-jquery-tmpl"> 
    {{if title.length}}
      <h3>${title}</h3>
      <p>Detail: ${$item.objectToString("detail")}</p>
    {{/if}}
  </script>  
  <div id="bookList"></div> 
  <script type='text/javascript'> 
    $(function(){
      var book = [
        { title: "Goodnight, World!",
          detail: { author: "Jojo Mojo", synopsis : "What the ..." }},
        { title: "Rainbow",
          detail: { author: "Cookie", synopsis : "Huh?" }}
      ];

      $("#testTemplate").tmpl(book, {
        objectToString : function(key) {
          var detail = this.data[key];
          return detail.author +  " " + detail.synopsis;
        }
      }).appendTo("#bookList");
  });
  </script> 
</body> 
</html> 

你可以看到它here