如何将信息从php传递到javascript

如何将信息从php传递到javascript,php,javascript,jquery,Php,Javascript,Jquery,我正在开发一个名为Folder的web UI控件-它基本上模仿Windows资源管理器文件夹-您可以在一个矩形内看到一个项目网格,可以拖动项目,将项目拖放到控件的其他实例中,添加新项目等等。每个项目都由一个项目模板组成-基本上是一些指示项目外观的php代码,例如,项目模板可能如下所示: my_item_template.php: <h3>my item</h3> <p>i'm an item</p> my_item_template.php:

我正在开发一个名为Folder的web UI控件-它基本上模仿Windows资源管理器文件夹-您可以在一个矩形内看到一个项目网格,可以拖动项目,将项目拖放到控件的其他实例中,添加新项目等等。每个项目都由一个项目模板组成-基本上是一些指示项目外观的php代码,例如,项目模板可能如下所示:

my_item_template.php:

<h3>my item</h3>
<p>i'm an item</p>
my_item_template.php:
我的物品
我是一个项目

拖动项目时,我希望将其替换为其他模板,例如:

my_item_drag_template.php:

<h3>my item</h3>
<p>i'm being dragged</p>
my_item_drag_template.php:
我的物品
我被拖走了

一个页面可能包含许多不同种类的项目,每个项目都有其模板、加载模板、删除模板等。我的问题是将所有这些模板从服务器端移动到客户端。

我现在做的是——在服务器端阶段,我找出了我需要的所有模板,并将它们包含在页面上,隐藏(display:none)。每当我需要一个模板时(例如,当用户开始拖动一个项目,我需要它的拖动模板时),我就会找到它,克隆它并使用它。我希望避免将所有这些代码隐藏在我的页面中,可以将其存储在jquery的$(folder).data或其他东西中。但是,我仍然需要将其从php中移除。一种选择是将模板插入$(folder.data)并在页面加载时将其从页面中删除,但我宁愿避免这样做(这会增加不必要的dom操作)。有更好的方法吗?

这当然是一个有趣的问题,但我认为将模板存储在dom中的隐藏div中离一个好的解决方案不远。除非您有很多模板,否则这通常是一个易于访问的好方法

另一种选择是在需要模板时ajax请求模板。您可以使用jQuery的$.load函数获取html块并将其注入元素

$('<div class="newItem" />')
  .load('getTemplate.php?template_id=newItem')
  .appendTo('body');
$(“”)
.load('getTemplate.php?模板\u id=newItem')
.附于(“主体”);
显然,您必须用真实数据填充新元素,但您仍然可以在一次调用中完成


这样做显然会影响性能,但是如果您不介意提出请求,那么结构上的好处是非常显著的。它允许您像在普通页面中一样在后端定义模板,而不是将它们全部放在底部的隐藏div中。

这当然是一个有趣的问题,但我认为将模板存储在dom中的隐藏div中离一个好的解决方案并不遥远。除非您有很多模板,这通常是一种方便访问的好方法

另一种选择是在需要模板时ajax请求模板。您可以使用jQuery的$.load函数获取html块并将其注入元素

$('<div class="newItem" />')
  .load('getTemplate.php?template_id=newItem')
  .appendTo('body');
$(“”)
.load('getTemplate.php?模板\u id=newItem')
.附于(“主体”);
显然,您必须用真实数据填充新元素,但您仍然可以在一次调用中完成


这样做显然会影响性能,但是如果您不介意提出请求,那么结构上的好处是非常显著的。它允许您在后端定义模板,就像在普通页面中一样,而不是将它们都放在底部的隐藏div中。

如果允许缓存,您可以在后续加载中获得一些性能。模板应该保持相当静态,所以这不是什么大问题。如果允许缓存,则可以在后续加载中获得一些性能。模板应该保持相当静态,所以这没什么大不了的。