【问题标题】:JSRender and AJAX and PHPJSRender 和 AJAX 和 PHP
【发布时间】:2016-05-20 16:21:44
【问题描述】:

我有一个页面,在加载时调用 Document.ready jQuery 脚本,该脚本使用今天的日期作为输入,向 PHP 脚本发送 AJAX 请求,以查询数据库中包含该日期的任何“条目”。如果它找到一些,它们被添加到一个数组中,然后 JSON 编码并返回到 jQuery 脚本,然后在 for 循环中,使用 JSRender 模板为每个“条目”吐出一个<div>。这些<div>s 存在于一个表单中。

有一个按钮可以创建一个新的“条目”,按下该按钮时只会克隆最后一个“条目”,将其擦除干净,为输入数组 (input name="TI[new1][ ]") 提供一个新索引 ( 'new1' 位)并将其附加在最后一个(在表单内)下。提交表单时,会发出另一个 AJAX 请求来写入/更新数据库。

我不太清楚的是如何在创建新条目时重新加载表单,以便它获取当前加上具有正确 id 的新条目,因为目前表单提交,但当然不会刷新,因此条目仍然具有“newx”ID,而不是写入数据库时​​分配的 ID。

<form>
  <div id="empty-for-jsrender-output">
  </div>
  <script (template for jsrender)></script>

</form>

<script src="get-entries"></script>


// get-scripts
calls ajax with var for current date
returns json array
for each nested array, calls jsrender script, which spits out a div block per entry within #empty-for-jsrender-output

那么,如何让表单或 #empty-for-jsrender-output 重新加载,就像在我提交带有新条目的表单后首次加载页面时一样?

抱歉,编辑,忘记添加我已经在 ajax.done 部分的提交条目 js 脚本中尝试过这个:

$.getScript("assets/js/getEntries.js");

尝试再次运行在页面实际重新加载时运行的相同脚本(有效)。但这所做的只是清空 div...它不会再次填充它。

【问题讨论】:

    标签: jquery ajax jsrender jsviews


    【解决方案1】:

    我不会尝试提出如何做到这一点的细节 - 因为它涉及特定的应用程序选择。

    但对于整体方法,我鼓励您使用 JsViews,而不仅仅是 JsRender,这样您就可以获得 UI 的增量更新,这要归功于可观察的数据更改和数据绑定。

    然后,对于您的 AJAX 场景,一个很好的方法是使用 JsRender/JsViews 中的新编译视图模型功能,并在您获得更新的 JSON 时对您的数据调用 merge() 方法从第二个和后续 AJAX 请求返回的数据。

    以下是一些文档链接:

    【讨论】:

    • 因此 HTML 视图由 JSRender 代码呈现。但是以后是否可以从 PHP 代码中调用,以便最终将视图提供给客户端?
    • 我不明白这个问题(“以后会从 PHP 代码中调用这个吗”??)。顺便说一句,你看过jsviews.com/#mvvm-views 吗?同样对于服务器渲染(在 Node.js 中,不是 PHP,但可以遵循类似的模式),请参阅 jsviews.com/#node/server-browser@spa 和其他相关主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2016-05-09
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多