Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 内容模板化服务器端中的客户端代码/表示分离_Php_Javascript_Template Engine - Fatal编程技术网

Php 内容模板化服务器端中的客户端代码/表示分离

Php 内容模板化服务器端中的客户端代码/表示分离,php,javascript,template-engine,Php,Javascript,Template Engine,我遇到了这样一种情况:代码和表示分离的伟大原则在web应用程序开发中产生了一个问题,其中存在两个独立的部分:客户机和服务器。我不知道如何在不耍花招的情况下同时坚持这一原则 考虑一个服务器端模板的示例,生成一个客户端web页面视图,该视图应该知道服务器端模型参数,以便将它们发送回服务器。例如,它可能看起来像这样: <!-- File: form.template --> <form id="main" name="main"> <input type="button"

我遇到了这样一种情况:代码和表示分离的伟大原则在web应用程序开发中产生了一个问题,其中存在两个独立的部分:客户机和服务器。我不知道如何在不耍花招的情况下同时坚持这一原则

考虑一个服务器端模板的示例,生成一个客户端web页面视图,该视图应该知道服务器端模型参数,以便将它们发送回服务器。例如,它可能看起来像这样:

<!-- File: form.template -->
<form id="main" name="main">
<input type="button" id="do" class="buttons" value="Do" onclick="requestDoFor(%modelid%)"/>
</form>
问题在于该模板不符合客户端的代码分离原则。生成的视图实际上应该没有任何JavaScript,即onclick处理程序应该来自模板:

<input type="submit" id="do" class="buttons" value="Do" />
<input type="submit" id="do" class="buttons" value="Do" objectid="%modelid%" />
问题是如何将模型参数传递给客户端的这部分,这部分实际上不是视图,这是控制器的客户端部分,并且不是由服务器端模板引擎生成的?我可以想象模板中的快速解决方法:

<input type="submit" id="do" class="buttons" value="Do" />
<input type="submit" id="do" class="buttons" value="Do" objectid="%modelid%" />
但它看起来并不完美。有更好的办法吗


我知道有些人完全以JavaScript生成视图,而JavaScript又在浏览器中生成DOM元素,但这种方法有其自身的缺点。还有什么建议?

用JavaScript生成视图的缺点是什么?为什么JavaScript不能驱动视图?我看不出它有什么问题,此外,有一些有趣的工具可以帮助您生成HTML内容,例如handlebarsjs。请在谷歌上查找。@JP,谢谢您的评论。您是否可以在评论中详细说明,或者作为如何在单个请求中获取车把模板和数据的答案?我可以推荐一个JSON容器,其中包含这两个模板,以及一些针对模板运行数据的加载程序,但它看起来像是一个黑客,因为多层结构JSON->HTMLtemplate->JavaScript->HTML。此外,应预编译Handlebar模板以获得更好的性能,它需要在服务器端代码中的调试和生产之间切换,并在加载器中进一步复杂化以检测预编译的模板。还是不?
$('#do').click(function(event){requestDoFor($(event.target).attr('objectid'))});