简体   繁体   English

如何使用骨干.js从服务器渲染数据

[英]How to Render Data from server with backbone.js

First for information, that is my response from server 首先供参考,这是我从服务器得到的答复

$response = array();
            $i = 0;
            while($result = mysql_fetch_assoc($query)){
                $response[$i]["id"]             = $result["ID"];
                $response[$i]["post_date"]      = $result["post_date"];
                $response[$i]["post_content"]   = $result["post_content"];
                $response[$i]["nickname"]       = $result["nickname"];
                $i++;
            }
            echo json_encode($response);

it seems that @k33g_org way does work but now console say me Uncaught ReferenceError: nickname is not defined 似乎@ k33g_org方式确实有效,但是现在控制台说我Uncaught ReferenceError: nickname is not defined

my template is 我的模板是

<script type="text/template" id="tplhome_post_list">
            <div class="post">
                <div class="view">
                    <p class="header_post">
                        <%= nickname %> - Le <%= post_date %>
                    </p>
                    <div class="statut">
                        <div class="like">
                            8
                        </div>
                        <div class="reply">
                            25
                        </div>                          
                    </div>
                    <p class="clear">
                        <%= post_content %>
                    </p>
                </div>
            </div>
        </script>

how can fix it ?? 如何解决呢? define template value ?? 定义模板值

you have to write fetch like this : 你必须这样写fetch:

Posts.fetch({
    success:function(data) {
       /* when you get data from server request data variable is populated */
       /* then you can call render() method of the view */
    }, 
    error : function(err) { 
      throw "Houston we've got a problem...";
    }
});

You can pass data to render method (something like this) 您可以将数据传递给render方法(类似这样)

    render : function(data) {
        var renderedContent = this.template(this.data.toJSON());
        $(this.el).html(renderedContent);
        return this;
    }

Or, better, you can bind reset event of the collection to the view, in the initialize method of the view, put this : 或者,更好的是,您可以将集合的reset事件绑定到视图,在视图的initialize方法中输入以下内容:

_.bindAll(this, 'render');
this.collection.bind('change', this.render);
this.collection.bind('add', this.render);
this.collection.bind('remove', this.render);

then when collection content change (ie when fetching), render() is called 然后,当集合内容发生更改时(即,获取时), render()调用render()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM