Backbone model.fetch没有设置值

时间:2015-09-06 14:16:23

标签: javascript backbone.js sequelize.js

这是我的骨干模型构造函数

define([], function(){
     return Backbone.Model.extend({

         urlRoot:'/dummy-api/Instances',
         defaults:{
             name:null,
             read:false,
             write:false
         },

         initialize: function () {
             this.fetch();
             console.log("after init "+this.get("id")+" name="+this.get("name"));
         }

     })
});

和/ dummy-api / Instances / 1已经放了这个

{"id":1,"name":"bangladesh"}

我已将此模型附加到具有此

的视图中
define(['models/instance.js'], function(Model){
     View = Backbone.View.extend({
            initialize: function() {
            this.model = new Model({
                id:1
            });

        });
     return new View();
});

网址被调用,它的内容如上所述,我可以在firebug中看到,但“名称”没有设置。 我知道我可以提供一个解析函数,因为我正在使用sequelize-restful-extended,我可能需要这样做,但我首先想要从一个固定文件读取和设置主干。 doco足够直接,我应该工作,所以我做了别的坏事吗?

1 个答案:

答案 0 :(得分:2)

您在model.fetch完成之前记录了这些值。

设置回调而不是在fetch成功完成后记录值,它应该按预期工作。

define([], function(){
    return Backbone.Model.extend({
        urlRoot:'/dummy-api/Instances',
        defaults:{
            name:null,
            read:false,
            write:false
        },
        initialize: function () {
            this.fetch({
               success: function() {
                   console.log("after init "+this.get("id")+" name="+this.get("name"));
               }.bind(this)
            });
        }
    })
});

这是必要的,因为this.fetch()异步执行XMLHttpRequest,并继续执行下一行代码,而浏览器在单独的"线程中执行该请求。 (出于所有意图和目的)。