更新:挖掘一天后
进入这个问题,我发现
当前jQuery模板库提供
没办法。本文
描述了一种很好的方法我还是想听一听
关于这样做的其他想法。这个
上面链接的文章要求
返回的模板字符串将被删除
插入到DOM中。似乎
将DOM排除在外将是错误的
非常理想,并且在服务器上的开销更少
浏览器想象一个大页面,上面有
多个组合模板可能会
不习惯。虽然,也许是因为
模板包装在脚本中
标记,每个模板只有一个DOM项?来吧,我们走吧
听到一些想法
使用jQuery模板库,将多个相关的相对较小的模板组合在一起的最佳方式是什么?您是否需要一个<;脚本>标记?如果通过AJAX动态拉取这些模板呢?我可以组合这些模板吗
考虑以下几点:
<;脚本id=“movieTemplate”type=“text/x-jquery-tmpl”>;
{{tmpl#titleTemplate}
<;tr class=“详细信息”>&书信电报;td>;董事:${Director}</td></tr>;
</脚本>;
<;script id=“titleTemplate”type=“text/x-jquery-tmpl”>;
<;tr class=“title”>&书信电报;td>${Name}</td></tr>;
</脚本>;
现在,因为这两个模板关系非常密切(一个依赖于另一个),所以将它们合并到一个AJAX调用中并同时获得它们是有意义的。我有一些想法,但我想知道是否有共同的/最好的方法来做到这一点?目前,我提取了一块HTML,然后执行.find()以获取模板的特定HTML页面。。。e、 g:
var templatePackage=fancyajaxcalltogetemplates();
“templatePackage”可能如下所示:
<;div id=“templatePkg”>;
<;div id=“movieTemplate”>;
{{tmpl#titleTemplate}
<;tr class=“详细信息”>&书信电报;td>;董事:${Director}</td></tr>;
</部门>;
<;div id=“titleTemplate”>;
<;tr class=“title”>&书信电报;td>${Name}</td></tr>;
</部门>;
</部门>;
我可以这样做:
var titleTemplate=jQuery.template('titleTemplate',$(templatePackage).find('titleTemplate');
及
var movieTemplate=jQuery.template('movieTemplate',$(templatePackage).find('movieTemplate');
…让我知道你的想法。。。你会怎么做
我喜欢更新中引用的文章,只是有一个假设,即除非将模板插入DOM,否则无法缓存模板。从jQuery.tmpl文档中
要在使用从字符串(而不是从页面中的内联标记)获得的标记时缓存模板,请使用$.template(name,markup)创建命名模板以供重用。请参阅jQuery.template()
使用这一点,我们可以构建一个javascript模板管理系统,允许我们在保持DOM干净的同时一次加载所需数量的模板。在客户端上,按名称保留模板对象的散列。您可以在这里使用您最喜欢的基于对象的javascript模式,但我认为其结构可能如下所示:
模板[templateName]={
templateMarkup:markupFromServer,
loadedAt:Date.now(),
compiledTemplateFunction:jQuery.template(templateName,markupFromServer)
}
然后使用模板生成HTML,如下所示:
模板['unique-name']。compiledTemplateFunction(inputData)
然后,构建卸载机制以释放内存:
函数卸载(templateName){
删除模板[templateName];
删除jquery.template[templateName];
}
最重要的是,您现在有了一种存储多个模板的方法,因此可以发出如下请求:$.get('/TemplateManagement/Render',arrayOfTemplateNamesToLoad,LoadManyTemplatesAccess)一次加载多个模板。我们唯一需要的是一个控制器TemplateManagement,它将模板名称数组作为输入,并返回将模板名称与其标记配对的JSON。有几种方法可以做到这一点,但在我看来,最方便的方法是为每个模板定义局部视图。在ASP.NET MVC 3中,您可以使用此技术和RenderPartial将每个模板的标记发送到JSON响应中。可以将局部视图命名为与模板相同的名称,也可以以某种自定义方式映射名称