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" 中执行该请求时继续执行下一行代码(出于所有意图和目的).
这是我的 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" 中执行该请求时继续执行下一行代码(出于所有意图和目的).