【问题标题】:jquery template engine, how to bind eventsjquery模板引擎,如何绑定事件
【发布时间】:2011-05-16 12:38:40
【问题描述】:

有没有办法将函数传递给 jQuery 模板引擎? http://api.jquery.com/tmpl/

如果我创建没有模板的 HTML,我会这样做:

jQuery("<a>link</a>").click(function(){alert('hi!')}).appendTo( "#forms_container" );

如何使用 jQuery 模板做到这一点?

------------编辑 我在这里找到了一些图书馆 http://knockoutjs.com/documentation/template-binding.html

看起来有点像 jQuery.live()

有没有其他方法可以将函数绑定到模板,或者这种方式主要用作默认方式?

-----------编辑 好的,那就让它成为.delegate。我认为对于我的小任务来说就足够了,而不会增加 Knockout 的复杂性

【问题讨论】:

    标签: jquery templates


    【解决方案1】:

    与 Ian 类似,但在实现上略有不同:

    jQuery('#forms_container').delegate('a', 'click', function() {
       //Click event, with context (faster)
    });
    

    这意味着 forms_container 中的所有链接都将具有该单击事件,无论发生什么变化。这与 Ian(完全合法)对 live 的使用不同,因为它有一个上下文,所以事件不需要一直冒泡。如果你给它上下文,你可以使用live(从 1.4 开始)完成同样的事情,但我更喜欢delegate 的语法。

    【讨论】:

    • 是的,我同意代表 - 每天都是上学日(尤其是对我来说;P)
    • @llamerr - 性能是相同的,只要你给出一个生活环境。没有上下文的生活比使用委托慢,或者有上下文的生活。
    • delegate() 不适合我,live() 可以。然后我意识到我在动态添加到 DOM 的包含元素上调用了 delegate()。因此,请将 delegate() 添加到未动态加载的最低级别。
    【解决方案2】:

    为您的链接提供一些东西以通过(类或类似或基于父容器)来识别它。然后使用 .live

    <script id="movieTemplate" type="text/x-jquery-tmpl">
        <div id="xyz"><a class="tmplClick">${link}</a> </div>
    </script>
    

    然后:

    $('a.tmplClick').live('click',function(){
        alert('clicked in template');
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多