jquery模板中的javascript函数

时间:2011-01-20 01:05:25

标签: jquery jquery-templates

似乎我在jquery模板中调用javascript函数时遇到了一些问题。我在这里设置了一个演示:http://jsfiddle.net/SXvsZ/8/

代码如下:

function htmlDetail(){
   return "hello <strong>world</strong>"; 
}

var book = [
    { title: "Goodnight, World!",
  detail: { author: "Jojo Mojo", synopsis : "What the ..." }},
{ title: "Rainbow",
  detail: { author: "Cookie", synopsis : "Huh?" }}
];

$("#testTemplate").tmpl(book).appendTo("#bookList");

,模板如下:

<script id="testTemplate" type="text/x-jquery-tmpl">
    {{if title.length}}
      <h3>${title}</h3>
      <p>Start: ${ htmlDetail() } :End</p>
    {{/if}}
</script>

<div id="bookList"></div>

似乎它应该呈现“hello world ”我想让它也将HTML呈现为html而不是纯文本。

4 个答案:

答案 0 :(得分:10)

要从另一个函数在模板中呈现html,您需要使用{{html}}模板标记。

<script id="testTemplate" type="text/x-jquery-tmpl">
    {{if title.length}}
      <h3>${title}</h3>
      <p>Start: {{html htmlDetail() }} :End</p>
    {{/if}}
</script>

您还应该在ready()函数之外移动htmlDetail函数

答案 1 :(得分:2)

回到你的问题,问题似乎是htmlDetail需要在模板本身之前定义。 (他们的例子'建议'那个)

它在这里工作:http://jsfiddle.net/SXvsZ/9/

答案 2 :(得分:1)

http://api.jquery.com/template-tag-html/

注意这是测试版本,所以它们还没有最终确定,很可能会改变甚至被弃用,所以不要过多地依赖它,但是要尝试它: )

答案 3 :(得分:0)

如果您选择不将全局函数设置为全局,则可以将非全局函数传递给模板,使其在模板中变为avialbale。

$("#testTemplate").tmpl(book, {htmlDetail : htmlDetail} ).appendTo("#bookList");

它可以像这样使用,{{html}}将使其无需编码

 <p>Start: {{html $item.htmlDetail() }} :End</p>