javascript - 无法使用带有下划线模板的 json 对象 ¿ 如何正确修复/格式化它?

标签 javascript jquery json underscore.js template-engine

我遇到下划线模板问题,但我无法找到解决问题的方法,我的情况如下。我有一个从 Web 服务返回的 json 对象,如下所示:

json= [{"username":"blue", "user_id":"1", "group_id":"1" ...},
       ...,{"username":"teal", "user_id":"1", "group_id":"2" ...}]

从服务器取回这个对象后,我试图制作它,以便我可以使用模板在网页上渲染该对象,为此,我以一种我认为会的方式“groupby”该数组通过执行以下操作来最好地满足我的需求:

json = _.chain(json).sortBy("user_id").groupBy("user_id").value();

这返回了一个具有以下结构的对象:

json= {"1":[{"username":"blue", "user_id":1, ...},
       ...,{"username":"teal", "user_id":1, ...}],"228":[{...},{...}]}

现在,我想要的是使用以下模板:

<script type="text/template" class="template-users">
            <div class="accordion">
                {%- _.each( rc, function( rc ){ %}

                <h3>

                    {%- rc.user_id%}

                </h3>
                <div>
                    <div>
                        <a class="group{%- rc.group_id%}" id="{%- rc.group%}">
                            <p>{%- rc.group %}</p>
                            <p>(group{%- rc.group%})</p>
                        </a>
                    </div>
                </div>
                {%- }); %}
            </div>


        </script>

我在 js 文件中设置了模板变量,如下所示:

_.templateSettings.variable = "rc";

我还更改了 underscore.js min 文件中的以下行,因为我正在使用 asp.net

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,      
                      evaluate    : /\{%([\s\S]+?)%\}/g,  
                      escape      : /\{%-([\s\S]+?)%\}/g};

不过,每当我尝试运行它时,它都不会导致模板充满空的东西(也就是说,“{%- %}”中的每个值都返回空值或空值,但我知道事实上,在模板上使用 json 之前,通过执行以下操作来填充 json:

var template = _.template(
                        $("script.template-users").html()
                    );

我在某个地方见过somewhere他们使用 _.each( rc.listItems, function( listItem ){});迭代对象上的项目,但这只是因为它们有一个具有以下结构的对象:

var templateData = { listTitle: "Olympic Volleyball Players", listItems: [ { name: "Misty May-Treanor", hasOlympicGold: true }, { name: "Kerri Walsh Jennings", hasOlympicGold: true }, { name: "Jennifer Kessy", hasOlympicGold: false }, { name: "April Ross", hasOlympicGold: false } ] };

所以问题是,谁能让我的代码工作?或者如果不可能,我可以让谁来让我的 json 对象以与上述方式相同的方式排列?

提前致谢。

最佳答案

这是一个工作示例:http://jsfiddle.net/uBaZ6/1/

_.templateSettings = {interpolate : /\{\{(.+?)\}\}/g,      
                  evaluate    : /\{%([\s\S]+?)%\}/g,  
                  escape      : /\{%-([\s\S]+?)%\}/g};
var data = [{"username":"blue", "user_id":"1", "group_id":"1"},{"username":"teal", "user_id":"2", "group_id":"2"},{"username":"red", "user_id":"3", "group_id":"2"},{"username":"blue", "user_id":"1", "group_id":"1"}];

var dataSorted = _(data).chain().groupBy("user_id").sortBy("group_id").value();
var userTemplate = _.template($("script.template-users").html());

$("#acc").html(userTemplate({'groups':dataSorted}));

关键是你需要一个命名的键来让模板保存一些东西。否则,它会获取您的数组并将其填充到全局命名空间中,在这种情况下这是没有意义的,因为它是一个数组。因此,要解决这个问题,只需在将其发送到模板之前将其转换为对象即可。因此,对于我们的第一遍,我们将您的数据映射到

userTemplate({'groups':dataSorted})

然后我们在模板中使用它,例如

{% _.each(groups, function(group){ %}
<h3>{%- group[0].group_id %}</h3>

您可以看到http://underscorejs.org/#template有关下划线模板的更多信息。我认为开发人员并没有真正认为美国模板非常强大(或者至少过去是这样)

关于javascript - 无法使用带有下划线模板的 json 对象 ¿ 如何正确修复/格式化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943988/

相关文章:

javascript - 将数组转换为 JSON 数组

javascript - ng-class 评估与 ng-repeat in Angular

jquery - 为圆形 slider 中的图像赋予 Angular

c# - 如何解析这个 JSON

c# - JSON 序列化程序在自定义 JsonConverter 中序列化自定义数据类型时添加额外字符作为响应 '\'

jquery - 将 JSON 作为字符串发布

asp.net - asp.net、javascript 和 silverlight 的共享本地化?

javascript - 这些函数调用有什么区别?

javascript - 如何从常规 Javascript 调用 Kotlin/JS 函数?

javascript - .JS 在滚动经过元素后在导航栏中淡入淡出