【问题标题】:Backbone/underscore.js json to template with an each loopBackbone/underscore.js json 到带有每个循环的模板
【发布时间】:2015-12-04 10:45:32
【问题描述】:

我在主干和下划线方面做错了,以在模板中回显一些数据。

我有这个 php 文件:(test.php)

<?php
echo '{"data1":"test 1","data2":"test 2"}';
?>

还有这个模板:

<script type="text/template" id="tpl-hello-backbone">
    <% _.each(messageView, function(messageView) { %>
        <%= kroeg %> 
        <%= locatie %>
    <% }); %>
</script>

这是我的主干文件:

var MessageModel = Backbone.Model.extend({
    urlRoot : 'test.php'
});

var MessageView = Backbone.View.extend({

    template:_.template($('#tpl-hello-backbone').html()),

    render:function (eventName) {
        $(this.el).html(this.template(this.model.toJSON()));
        return this;
    }
});

var messageModel = new MessageModel();
var messageView = new MessageView({model:messageModel});
messageModel.fetch({
    success: function () {
        $('#msg').html(messageView.render().el);
    }
});

现在由于某种原因,这个回声:

 test 2 test 1 test 2 test 1 test 2 test 1 test 2 test 1

所以 4 次而不是 1 次。

当我像这样使 json 更长时:

<?php
echo '{"kroeg":"test 1","locatie":"test 2"},{"kroeg":"test 1","locatie":"test 2"}';
?>

它什么都没有。我究竟做错了什么。我想我不明白一些东西,但我找不到什么。

希望有人能帮帮我!

您好, 梅林德克勒克

【问题讨论】:

  • 为什么要迭代对象?你只需要输出&lt;%= kroeg %&gt; &lt;%= locatie %&gt;
  • 是的,我知道。但正如我在帖子中解释的那样,我也希望它能够处理多个输入

标签: javascript json backbone.js underscore.js


【解决方案1】:

如果您将 JSON 对象传递给this.template(),您的模板将正常工作,如下所示: $(this.el).html(this.template({'messageView':[{'kroeg':'test 1','locatie':'test 2'},{'kroeg':'test 5','locatie':'test 6'}]}));

也就是说,_.each() 方法期望 messageView 是一个数组:

<script type="text/template" id="tpl-hello-backbone">
    <% _.each(messageView, function(messageView) { %>
        <%= messageView.kroeg %> 
        <%= messageView.locatie %>
    <% }); %>
</script>

【讨论】:

  • 嗯,是的,这听起来合乎逻辑。奥尔多它仍然没有工作。我也没有收到错误..
【解决方案2】:

each 中的第一个问题:它迭代 messageView 键,这就是输出重复的原因。

所以你必须更换

<% _.each(messageView, function(messageView) { %>
    <%= kroeg %> 
    <%= locatie %>
<% }); %>

<%= kroeg %> 
<%= locatie %>

关于“更长的 json”。您正在尝试渲染 Collection。您需要将 PHP 中的数据作为数组发送

<?php
    echo '[{"kroeg":"test 1","locatie":"test 2"},{"kroeg":"test 1","locatie":"test 2"}]';
?>

并为集合创建类

var MessageCollection = Backbone.Collection.extend({
    model: MessageModel
});

实例化它,获取并render

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多