0

在 Mustache 中加载数据。json 静态文件,我不明白如何从 MySQL 数据库加载数据。

示例:当前“部分”中包含的数据是从 .json 文件加载的,但是当然,任何应用程序都需要以动态方式从数据库加载数据(在我的例子中是 mysql)。

我能怎么做?

提前致谢!

乔瓦尼

4

2 回答 2

2

Mustache PHP 只是一个模板引擎。它不是一个准备就绪的数据库绑定的完整应用程序。

您需要编写一个应用程序来实例化 Mustache 模板并提供必要的数据。

$m = new Mustache_Engine;
echo $m->render(
         'Hello {{planet}}',
         array('planet' => 'World!')
     ); // "Hello World!"

具有值的数组planet=> 'World!'是传递给 Mustache 的数据(在这种情况下)。您可以从数据库中加载该数据并将其作为变量传递给 mustache。

于 2013-10-30T12:08:33.037 回答
1

如前所述,Mustache 将有助于模板化,但您必须为其提供要使用的数据并获取您需要让 PHP 连接到 MySQL 并返回它的数据。我猜你正在使用 PHP,因为它在标题中......

希望这将帮助您入门。我在这个例子中使用了来自Sakila 示例数据库的 actor 表中的数据。

样本数据:

# actor_id, first_name, last_name, last_update
1, PENELOPE, GUINESS, 2006-02-15 04:34:33
2, NICK, WAHLBERG, 2006-02-15 04:34:33
3, ED, CHASE, 2006-02-15 04:34:33
4, JENNIFER, DAVIS, 2006-02-15 04:34:33
5, JOHNNY, LOLLOBRIGIDA, 2006-02-15 04:34:33

首先,您需要从 MySQL 获取数据的 php 脚本。使用json_encodefetch_all()方法返回的数组转换为 JSON 字符串。通过指定我们想要获得一个关联数组 ( fetch_all(MYSQLI_ASSOC)),它将具有“列名”=>“值”对。json_encode()照顾其余的。

<?php

//test.php
  $mysql = new mysqli(DB_HOST, DB_USER, DB_PASSWD, 'sakila');

  $query = "SELECT * FROM actor LIMIT 5";

  $result = $mysql->query($query);

  echo json_encode($result->fetch_all(MYSQLI_ASSOC));
?>

在从数据库查询和返回数据时,您还需要注意其他事项,特别是如果您将用户提交的数据作为查询的一部分传递,但这超出了问题的范围,所以我在这里不担心。

PHP脚本输出:

[
  {
    "actor_id":"1",
    "first_name":"PENELOPE",
    "last_name":"GUINESS",
    "last_update":"2006-02-15 04:34:33"
  },
  {
    "actor_id":"2",
    "first_name":"NICK",
    "last_name":"WAHLBERG",
    "last_update":"2006-02-15 04:34:33"
  },
  {
    "actor_id":"3",
    "first_name":"ED",
    "last_name":"CHASE",
    "last_update":"2006-02-15 04:34:33"
  },
  {
    "actor_id":"4",
    "first_name":"JENNIFER",
    "last_name":"DAVIS",
    "last_update":"2006-02-15 04:34:33"
  },
  {
    "actor_id":"5",
    "first_name":"JOHNNY",
    "last_name":"LOLLOBRIGIDA",
    "last_update":"2006-02-15 04:34:33"
  }
]

然后,您可以使用$.getJSON()来加载test.php. 在我们的示例中,回调函数可以通过actorData变量访问接收到的数据。使用$.each方法,我们可以遍历 JSON 对象中的每个“行” actorData,并告诉 Mustache 根据之前定义的模板呈现每个。渲染后,每一行都会附加到#content元素上。

<!--index.html-->
<script type="text/javascript" src="/recipes/include/js/jquery.js"></script>
<script type="text/javascript" src="/recipes/include/js/mustache.js"></script>
<script>
  var template = "<div><span>{{first_name}}</span> <span>{{last_name}}</span></div>";

    $(function () {
        $.getJSON('test.php',
        function (actorData) {

            $.each(actorData, function (i, actor) {
                var html = Mustache.render(template,
                actor);
                $('#content').append(html);
            });

        });
    });
</script>
<div id="content"></div>

除了 Mustache.js 之外,我还包括 jQuery

于 2013-11-06T21:27:44.537 回答