我使用jQueryUI的和jQuery的TMPL,但我相信我在寻找的建议是足够宽广它会适用于任何类型的模板化图书馆。jQuery-UI小部件与jQuery模板结合?
我的问题是,我会经常有某种形式的CRUD部件在我的模板
<script id="some-widget-template">
<div class="some-widget">
<input name="NameField"/>
<button id="some-widget-save">Save</button>
</div>
</script>
这给我留下了非常可读的小工具,我可以回去和编辑等,除了它是丑陋的。使用jQueryUI我可以使按钮非常漂亮,但它需要一些Javascript。所以在我相应的Javascript控制器中,我的代码如下所示:
$("#some-widget-template")
.render(arrayOfDataObjects)
.appendTo("body");
$("#some-widget-save").button();
对于这个非常简单的示例,此工作正常。但是,我的控制器很快就会变得越来越杂乱,需要转换的元素越多。它也觉得这应该是视图/模板引擎的关注,更不用说有魔术字符串(“#some-widget-save”)降低了代码的可维护性。
什么是去了解它的最好方法?当然,我不能成为第一个遇到这个问题的人。我将jquery-tmpl一起入侵,以便在返回一个jQuery对象之前,它会扫描一个按钮元素,如果遇到它,则将其转换为适当的按钮元素。这看起来很慢,因为它必须遍历模板中的每个元素。有任何想法吗?
编辑:我发现,使用CSS3的时候,我的问题90%被淘汰。当为非CSS3兼容的浏览器构建时,我使用了工厂方法。
感谢您的详细回复。这是我最初的路线,缺点是并不是所有的模板都在小部件初始化时呈现。首次初始化后,不同的事件会触发附加模板。我想最好是像功能一样的jQuery生活,但我不知道如何实现。 – 2010-08-21 17:03:16
啊,我明白了。我可以想象的一个替代解决方案是实际创建一个事件分派(或者,也可能是回调启用)工厂,该工厂处理从原始数据创建模板元素。您可以将数据传递给工厂的一个方法(例如factory.buildTemplate('data')),并且工厂可以响应一个回调或事件触发一个函数,该函数会根据属性和属性自动应用UI小部件DOM节点传递给它。让我知道这对你来说听起来是否合理,我会写一些伪代码=] – cdata 2010-08-22 19:00:50
糟糕,看起来你只有一半的赏金。对不起,这是我的第一个赏金......我认为我所要做的就是标出最好的答案。 – 2010-08-27 02:34:25