2012-02-18 95 views
1

应用

在PHP中,我将输出,网络爬虫一些初步意见,可以刮我的网站:PHP和JS如何共享HTML模板?

---------------- 
| cool view 1 | 
---------------- 
| cool view 2 | 
---------------- 
| cool view 3 | 
---------------- 
| Load more  | 
---------------- 

的Javascript还需要动态地产生了同样的观点。当用户点击“加载更多”按钮,它的AJAX到服务器,并将结果附加到页面:

---------------- 
| cool view 1 | 
---------------- 
| cool view 2 | 
---------------- 
| cool view 3 | 
---------------- 
| cool view 4 | 
---------------- 
| cool view 5 | 
---------------- 
| cool view 6 | 
---------------- 
| Load more  | 
---------------- 

当前实现

目前,我的PHP意见和JS的看法是分开写。以下是使用CodeIgniter框架加载假设PHP视图的示例。

view.php

<?php 
<div> 
    <span>cool view</span> 
    <span><?=$id?></span> 
</div> 
?> 

Controller.php这样

$this->load->view(
    'view', 
    array('id' => '999') 
); 

而这里的AJAX的例子,用来加载Prototype框架的假设的看法。

ajax.php

echo json_encode(
    array('id' => random()) 
); 

view.js

MyView = Class.create({ 
    initialize: function(id) { 
     var div = new Element('div'); 
     var span0 = new Element('span').update('cool view'); 
     var span1 = new Element('span').update(id); 
     div.appendChild(span0); 
     div.appendChild(span1); 
     return div; 
    } 
}); 

controller.js

new Ajax.Request(
    '/index.php/someController/someMethod', { 
     onSuccess: function(transport) { 
      var response = transport.responseText.evalJSON(); 
      $('viewsContainer').appendChild(
       new MyView(response.id) 
      ) 
     } 
    } 
); 

需要一个清洁SOLUT离子

我需要一种方式来分享整个PHP和JS的HTML模板,而无需重写所有内容。在我的实际项目中,我有几十个观点。在PHP和JS中复制视图代码似乎很难维护。我没有用廉价的PHP路由将直接的HTML打印到AJAX,因为1)包含HTML标签需要额外的大小开销,2)它不是客户端不可知的 - 也就是说,非浏览器客户端无法理解输出,以及3)它不允许JS在视图内的子视图上干净地附加侦听器。

回答

0

你可以成为最终的HTML,直接把浏览器:

if(<request is from ajax>) 
    echo $this->load->view('view', array('id' => '999'), false); 

最后一个参数false加载视图到一个变量,在这种情况下返回它...

然后,在JavaScript端,你只需创建一个新的div,并设置它的innerHTMLresponse.text

0

我不认为你需要它的老派的方式。为什么不使用像小胡子1这样的模板引擎? 这样你就不会有大量的HTML开销,并且仍然可以发送只包含id的超薄json(10个vs 50个字符和你的情况,甚至在标记上很轻)。