Backbone model.fetch 未设置值

Backbone model.fetch not setting values

这是我的 backbone 模型构造器

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();
});

正在调用URL,它的内容如上,我可以在firebug中看到,但是"name"没有被设置。 我知道我可以提供一个解析函数,因为我正在使用 sequelize-restful-extended 我可能需要这样做,但我首先希望 backbone 从固定文件读取和设置。 doco 足够直接,我所拥有的应该可以工作,所以我在做其他不好的事情吗?

您正在 model.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,并在您的浏览器在单独的 "thread" 中执行该请求时继续执行下一行代码(出于所有意图和目的).