如何使用Mustache遍历json字符串集合?

时间:2013-05-08 18:34:02

标签: javascript model-view-controller mustache

创建字符串数组的MVC是

  public JsonResult GetInvalidFilesAJAX(JQueryDataTableParamModel param)
    {
        string[] invalidFiles = new string[] { "one.xls", "two.xls", "three.xls" };

        return Json(new
        {
            Status = "OK",
            InvalidFiles = invalidFiles
        });
    }

应该循环并打印出每个字符串的javascript是

  $.ajax(
                          {
                              type: 'POST',
                              url: 'http://localhost:7000/ManualProcess/GetInvalidFilesAJAX',
                              success: function (response) {
                                  if (response.Status == 'OK') {
                                      //Use template to populate dialog with text of Tasks to validate
                                      var results = {
                                          invalidFiles: response.InvalidFiles,
                                      };
                                      var template = "<b>Invalid Files:</b> {{#invalidFiles}} Filename: {{invalidFiles.value}} <br />{{/invalidFiles}}";
                                      var html = Mustache.to_html(template, results);

                                      $('#divDialogModalErrors').html('ERROR: The following files have been deleted:');
                                      $('#divDialogModalErrorFiles').html(html);

如何引用数组中的字符串?上面的方法不正确。我发现的所有例子似乎都适用于Jason集合中有属性名称的情况..在我的情况下,它只是一个键值对(我猜?)

1 个答案:

答案 0 :(得分:1)

没有内置方式。您必须将JSON转换为数组或自行循环遍历数据,例如

var data = JSON.parse(jsonString); // Assuming JSON.parse is available
var arr = [];
for (var i = 0, value; (value = data[i]); ++i) {
  arr.push(value);
}

可替换地:

var arr = [];
for (var prop in data){
  if (data.hasOwnProperty(prop)){
    arr.push({
      'key' : prop,
      'value' : data[prop]
    });
  }
}

然后显示它:

var template = "{{#arr}}<p>{{value}}</p>{{/arr}}";
var html = Mustache.to_html(template, {arr: arr});

这假设您的JSON对象深度为一级。