Javascript 从emberjs Handlebar应用程序获取干净的HTML
我一直在Ember.js中构建一个HTML(电子邮件/页面)合成工具,作为一种让我头脑清醒的方法,我想这是一种WYSIWYG 用户添加具有不同值的各种对象(链接、文本等),这些对象可以具有不同的模板,并使用jqueryui进行排列,jqueryui将反馈给控制器。用户在屏幕上看到的实际上是即时的,我目前正在保存并从localstorage重新加载干净的JSON,作为一种持久性方法 但我真正想做的是,能够生成用户所看到的内容的干净HTML版本。要么来自写入前端应用程序的内容,要么通过在服务器端处理我导出的JSON 我希望尽可能多地使用JS、Ember和Handlebar,最好不要在不同的地方重新实现太多的模板/代码 下面是渲染输出中的“行”示例 .行控件由全局编辑器切换开关打开和关闭Javascript 从emberjs Handlebar应用程序获取干净的HTML,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我一直在Ember.js中构建一个HTML(电子邮件/页面)合成工具,作为一种让我头脑清醒的方法,我想这是一种WYSIWYG 用户添加具有不同值的各种对象(链接、文本等),这些对象可以具有不同的模板,并使用jqueryui进行排列,jqueryui将反馈给控制器。用户在屏幕上看到的实际上是即时的,我目前正在保存并从localstorage重新加载干净的JSON,作为一种持久性方法 但我真正想做的是,能够生成用户所看到的内容的干净HTML版本。要么来自写入前端应用程序的内容,要么通过在服务器端处理
<script id="metamorph-11-start" type="text/x-placeholder"></script>
<div id="ember507" class="ember-view template-row ui-droppable">
<ul id="ember524" class="ember-view row-controls">
<li class="dragger"><a href="#">drag</a></li>
<li class="type"><a href="#" data-ember-action="19">type</a></li>
<li class="edit"><a href="#" data-ember-action="20">edit</a></li>
<li class="delete"><a href="#" data-ember-action="21">delete</a></li>
</ul>
<script id="metamorph-12-start" type="text/x-placeholder"></script>
<script id="metamorph-13-start" type="text/x-placeholder"></script>
<h2><a href="http://foo.com/bar" data-bindattr-34="34">
<script id="metamorph-19-start" type="text/x-placeholder"></script>
Link title text
<script id="metamorph-19-end" type="text/x-placeholder"></script>
</a></h2>
<img src="http://foo.com/image.png" data-bindattr-35="35">
<script id="metamorph-20-start" type="text/x-placeholder"></script>
Teaser/synopsis
<script id="metamorph-20-end" type="text/x-placeholder"></script>
<a href="http://foo.com/bar" data-bindattr-36="36">Read more</a>
<script id="metamorph-13-end" type="text/x-placeholder"></script>
<script id="metamorph-12-end" type="text/x-placeholder"></script>
</div>
<script id="metamorph-11-end" type="text/x-placeholder"></script>
摘要/概要
我想这似乎是一件奇怪的事情,实际应用有限,但我想现在就完成它。我已经开始:)而且,我认为任何答案中涉及的原则可能有不同的应用,我只是还没有想到
谢谢!感谢这里的其他人回答了我之前关于余烬的几个问题
编辑
说清楚点,我说的是这样的输出
<h2><a href="http://foo.com/bar">Link title text</a></h2>
<img src="http://foo.com/image.png">
Teaser/synopsis
<a href="http://foo.com/bar">Read more</a>
摘要/概要
解决方案编辑
如果有人找到这个链接,我已经在属性循环中添加了一个属性检查(到我的标准JS版本中)
<script>
// ...
return $.each($this[0].attributes, function(index, attr) {
// this bit added
if(!attr) {
return;
}
if (attr.name.indexOf('data-bindattr') === -1) {
return;
}
// ...
</script>
// ...
返回$.each($this[0]。属性,函数(索引,属性){
//这一点增加了
如果(!attr){
回来
}
if(attr.name.indexOf('data-bindattr')=-1){
回来
}
// ...
这可能是我编写的其他一些代码中的错误,但jQuery在循环中以attr的形式传递“undefined”。jQuery似乎想解析整个函数,所以我无法准确地调试这是什么。不过,检查目前似乎对我有效。
恐怕不知道如何将其纳入特定的原始coffeescript文件中。CodeBrief中的ghempton在这篇很棒的帖子中谈到了这一点: 检查提示7。 把它们都读一遍,这是值得的
顺便说一句,它在coffeescript的帖子中,如果你需要获得JS版本,请转到“尝试coffeescript”选项卡并转换它!CodeBrief的甘普顿在这篇很棒的帖子中谈到了它: 检查提示7。 把它们都读一遍,这是值得的
顺便说一下,这篇文章在coffeescript上,如果你需要获得JS版本,请转到“尝试coffeescript”选项卡并转换它!谢谢Luan。我不久前在我的钉板上添加了这篇文章,但没有回忆起这段代码。我原本想尝试使用alernate呈现过程,而不是解析元素,但当你看到它时,我发现了它就像这样,这是一个比我所想的方法更优雅的解决方案。谢谢Luan。我不久前在我的钉板上添加了那篇文章,但不记得那一段。我最初试图考虑的是alernate呈现过程,而不是解析元素,但当你看到它这样写的时候,这是一个比其他方法更优雅的解决方案我正在考虑的方法。