主干模型.toJSON()不';fetch()之后不能工作

主干模型.toJSON()不';fetch()之后不能工作,json,backbone.js,fetch,Json,Backbone.js,Fetch,你好!我需要将模型的属性呈现为JSON,以便将它们传递到模板中 型号: var UserInfo = Backbone.Model.extend({ url: appConfig.baseURL + "users/", }); 模板: <script type="text/html" class="template" id="profile-form"> <h2 class="ui-li-heading"><%= username %></h2

你好!我需要将模型的属性呈现为JSON,以便将它们传递到模板中

型号:

var UserInfo = Backbone.Model.extend({
url: appConfig.baseURL + "users/",
});
模板:

<script type="text/html" class="template" id="profile-form">
    <h2 class="ui-li-heading"><%= username %></h2>
    <p class="ui-li-desc"><strong><%= phone %></strong></p>
</script>
当我在控制台中输入类似的内容时,
user.toJSON()
返回正确的数据

var user = new UserInfo();
user.fetch({
        data: $.param({email: localStorage.getItem('user_email')}),
        type: 'POST'
});
但是当我把它放到视图中时,它返回
Object{}

哪里有错误,或者告诉我如何以json格式将从服务器接收到的模板数据以不同的方式传递给模板?谢谢

您似乎有两个问题
fetch
是异步的,因此需要使用回调来使用信息。但首先,要解释一下
toJSON
.toJSON()
实际上并不返回JSON字符串,而是返回一个您希望JSON字符串化的对象。这允许您修改
toJSON
方法,以自定义将从模型或集合中获取哪些属性并将其添加到模型的JSON字符串表示中。以下是一段引文:

toJSONcollection.toJSON([options])

返回JSON模型属性的浅层副本 严格化。这可以用于持久性、序列化或 用于在发送到服务器之前进行扩充。这个名字 方法有点混乱,因为它实际上并不返回JSON字符串 -但我担心这是JavaScript API用于 JSON.stringify可以工作

所以您应该在代码中替换这一行

console.log(user.toJSON())
用这个

console.log(JSON.stringify(user))
您看到的对象由
toJSON
返回,然后将转换为JSON

现在,即使这样做了,它也无法正常工作,因为在从
fetch
获取模型数据之前,您将执行
console.log
fetch
是异步的,因此在
success
回调中完成
fetch
后,您需要调用想要执行的任何代码:

    user.fetch({
        data: $.param({email: localStorage.getItem('user_email')}),
        type: 'POST',
        success: function(){
            console.log(user);
            console.log(JSON.stringify(user));
        }
    });

您的呈现方法中的Try可能重复:var attributes=this.model.toJSON();this.el.html(this.template(attributes));使用$el更好,因为el可以是动态的。另外,在创建视图实例时可以设置model属性:var profile=newuserinfo({id:1});var profileView=newprofileview({model:profile});Backbone.Model.toJSON返回对象是正确的行为。请参阅文档:祝你好运@aphex,这里至少有两个问题,您需要使用
JSON.stringify()
,并且
fetch
是异步的。我的回答最初不包括
fetch
问题,我已经更新了它。
    user.fetch({
        data: $.param({email: localStorage.getItem('user_email')}),
        type: 'POST',
        success: function(){
            console.log(user);
            console.log(JSON.stringify(user));
        }
    });