草庐IT

php - PHP 和 JavaScript 模板的互换性(防止重复)

coder 2024-04-16 原文

我使用 MVC PHP 框架使我的 Web 应用程序尽可能保持干爽。我所有的 HTML 模板都整齐地藏在我项目应用程序范围内的一个文件夹中。

问题是,每当我使用 JSON 字符串通过 AJAX 构建页面时,我都需要重复使用这些模板中的很多行,并将它们复制到我的 JavaScript 文件中的某个位置。这意味着我的 JavaScript 文件中的模板与我的 PHP 应用程序中的模板之间存在代码重复。

我想知道如何防止这种重复。一种方法当然是使用 AJAX 加载模板,但是我最终会得到一个页面的双重 AJAX 请求。此外,PHP 模板使用与 MooTools 不同的标记样式来表示变量,但 HTML 设置是相同的。

总结一下:是否有任何巧妙的方法或工具来防止模板重复,以便一个文件可以同时用于 PHP 和 JavaScript?郑重声明:我使用 MooTools 框架来构建我的 JavaScript 文件。

编辑

经过一些研究,我找到了我认为最好的答案。对于那些感兴趣的人:

PURE 将 HTML 表示和 JavaScript 逻辑完全分开,因此您不必费心在脚本中包含 HTML 元素。模板可以简单地在 HTML 文件中提供。

示例:

// JSON string
{ 'who': 'me' }

// In your rendered HTML page:
<div id="who"></div>

// After the JSON string is sent back
<div id="who">me</div>

此外,它可以被多种库使用:MooTools、jQuery、dojo、Prototype 等。

最佳答案

有趣的问题,我有时也在努力解决。

  • 您可以将您的 html 放在您的 javascript 代码中,这是重复的,您希望避免这种情况

  • 您可以使用单独的 ajax 调用加载您的 html,这会导致运行更多的 ajax 调用,并可能减慢您的应用程序。你可能想避免它。

  • 您可以在将加载数据的 Ajax 调用中传递您的 html。这样一来,您只有一个电话。让您的 PHP 打开您的模板,并将它们添加到数据 json 流中。

  • 你可以把模板放在你原来的html里面,把它隐藏起来。

我会选择解决方案 3,如果模板很小且有限,我可能会选择 4。

然后 JSon 将类似于 {"data": ... your original data object, "templates":{...}}

关于php - PHP 和 JavaScript 模板的互换性(防止重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121074/

有关php - PHP 和 JavaScript 模板的互换性(防止重复)的更多相关文章

  1. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  2. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h

  3. ruby - Chef Ruby 遍历 .erb 模板文件中的属性 - 2

    所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP

  4. ruby-on-rails - Rails 3.2 防止使用错误保存对象 - 2

    我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中

  5. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  6. ruby - 正则表达式 - 保存重复捕获的组 - 2

    这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","

  7. ruby - 防止SQL注入(inject)/好的Ruby方法 - 2

    Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject

  8. ruby - 如何通过Middleman安装和使用Slim模板引擎 - 2

    一般来说,我是Middleman和ruby​​的新手。我已经安装了Ruby我已经安装了Middleman和gem以使其运行。我需要使用slim而不是默认的模板系统。所以我安装了Slimgem。Slim的网站只说我需要'slim'才能让它工作。中间人网站说我只需要在config.rb文件中添加模板引擎,但是没有给出例子...对于没有ruby​​背景的人来说,这没有帮助。我在git上找了几个config.rb,它们都有:require'slim'和#Setslim-langoutputstyleSlim::Engine.set_default_options:pretty=>true#Se

  9. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

  10. Ruby 从数组中删除重复的对象 - 2

    我无法使用传统的Ruby方法从下面的数组user_list中删除所有重复对象,从而获得预期的结果。有解决这个问题的聪明方法吗?users=[]user_list.eachdo|u|user=User.find_by_id(u.user_id)users 最佳答案 这个怎么样?users=User.find(user_list.map(&:user_id).uniq)这具有作为一个数据库调用而不是user_list.size数据库调用的额外好处。 关于Ruby从数组中删除重复的对象,我们在

随机推荐