这里是我的问题,我想动态地改变我的模型(当集合被实例化时,动态地改变我的模型中的一个变量)。
下面是我的代码:
define(['backbone'], function (backbone) {
var MyModel = Backbone.Model.extend({
initialize: function() {
var that = this;
var likes;
var UrlGetLike = "https://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url=%27https://www.facebook.com/pages/Stackoverflow/1462865420609264%27&format=json";
$.getJSON( UrlGetLike, {
format: "json"
})
.done(function(data) {
likes = data[0].like_count;
that.set({
'likes' : likes
});
});
},
});
return MyModel;
});但是数据没有更新,在.done()完成之前返回MyModel。
我也试过了:
define(['backbone'], function (backbone) {
var MyModel = Backbone.Model.extend({
initialize: function() {
var that = this;
var likes;
var UrlGetLike = "https://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url=%27https://www.facebook.com/pages/Stackoverflow/1462865420609264%27&format=json";
$.getJSON( UrlGetLike, {
format: "json"
})
.done(function(data) {
likes = data[0].like_count;
that.set({
'likes' : likes
});
that.returnn;
});
},
returnn: function(){
return this;
}
});
});但是我得到这样的错误:无法读取未定义的属性'prototype‘,因为我触发了
var collection = new Collection({collection : MyModel});在MyModel返回之前(我想)
如果有人有解决方案或东西来帮助我,我将不胜感激:)。
发布于 2014-11-03 05:06:10
您可以在创建集合后获取集合中每个模型的信息(实际上,在initialize方法中获取数据是一件坏事,因为此方法不是为此目的而创建的。最好显式地调用模型的fetch方法(在我们的例子中,我们将其称为fetchLikes)。
var MyModel = Backbone.Model.extend({
fetchLikes: function () {
var UrlGetLike = "https://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url=%27https://www.facebook.com/pages/Stackoverflow/1462865420609264%27&format=json";
$.getJSON(UrlGetLike, {
format: "json"
}, _.bind(function (data) {
likes = data[0].like_count;
that.set({
'likes': likes
});
}, this));
}
});
var Collection = Backbone.Collection.extend({
model: MyModel
})
var collection = new Collection();
//.. insert models in the colleciton ..
collection.forEach(function (model) {
model.fetchLikes();
})请记住,您正在使用for-loop进行ajax请求,这被认为是一种糟糕的做法。只有当您无法在一次请求中获取所有数据时才这么做。
https://stackoverflow.com/questions/26704301
复制相似问题