1

我遇到了这样一种情况,即代码和表示分离的重要原则在 Web 应用程序开发中产生了问题,其中存在两个独立的部分:客户端和服务器。我不确定如何在没有技巧的情况下同时在两端遵守这一原则。

考虑一个带有服务器端模板的示例,生成一个客户端网页 ( view),它应该知道服务器端model参数,以便可以将它们发送回服务器。例如,它可能看起来像这样:

<!-- File: form.template -->
<form id="main" name="main">
<input type="button" id="do" class="buttons" value="Do" onclick="requestDoFor(%modelid%)"/>
</form>

这样的模板用于与代码适当分离的服务器上(例如,在 php 中,使用抽象模板引擎):

$templateEngine->create('form.template', array('modelid' => $value))->render();

问题是模板不符合客户端的代码分离原则。生成的视图实际上应该没有任何 JavaScript,即onclick处理程序应该来自模板:

<input type="submit" id="do" class="buttons" value="Do" />

到一个单独的 JavaScript 文件:

$('#do').click(function(){requestDoFor(%modelid%);});

问题是如何将模型参数传递给客户端的这部分,这不是view(其实这是客户端的一部分controller),并且不是由服务器端模板引擎生成的?我可以想象模板中的快速解决方法:

<input type="submit" id="do" class="buttons" value="Do" objectid="%modelid%" />

和 JavaScript 中的类似内容:

$('#do').click(function(event){requestDoFor($(event.target).attr('objectid'))});

但它看起来并不完美。有没有更好的办法?

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

4

0 回答 0