Backbone "new" 集合未创建新对象
Backbone "new" Collection not creating new object
我正在构建一个使用 RequireJS 和 Backbone 的单页应用程序。
我有多个数据端点,我使用 Backbone 来管理。
我有一个构建 URL 的集合,并在获取 URL 之前将唯一 ID 附加到 URL。
集合定义如下:
define([
'underscore',
'backbone',
'models/MyModel'
], function(_, Backbone, MyModel){
console.log('test'+id);
var Data = Backbone.Collection.extend({
model: MyModel,
url: '/getData/?id='+id,
parse: function(response) {
return response;
}
});
return Data;
});
并且是这样使用的:
function retrieveData() {
require(['collections/MyData'],
function(MyData) {
// create model
var data = new MyData(var:myVars});
// fetch data
data.fetch({async: false});
//...
}
);
}
一切都相当简单。
但是,当我创建模型时出现了问题。
URL 用于查询服务器的 Id 在后台发生变化,当它发生时我调用 retrieveData() 。
在代码的第一遍中,模型被创建,并且我已经验证了这一点,因为 "console.log('test'+id);" 打印到控制台。
但是,当我再次调用 retrieveData() 时(在 id 更改后),代码被执行以创建一个新模型但不是创建一个新模型,Backbone 似乎 return 已经实例化的模型来自第一次通过,因此 URL 不会使用新 ID 进行更新。
"console.log('test'+id);" 不会首先在任何传递栏上打印到控制台,因为未创建对象且未输入函数。
我是不是连接了一些东西在工作,或者这里是否有某种缓存?
谢谢
您的问题似乎是您在创建集合原型时试图制作 id
,但创建 MyData
集合的代码只有 运行 一次。
更好的方法可能是在实例化期间提供 id
。
像这样:
define([
'underscore',
'backbone',
'models/MyModel'
], function(_, Backbone, MyModel){
var Data = Backbone.Collection.extend({
model: MyModel,
initialize: function(options) {
this.id = options.id;
},
url: function() {
return '/getData/?id=' + this.id
},
parse: function(response) {
return response;
}
});
return Data;
});
和
function retrieveData() {
require(['collections/MyData'],
function(MyData) {
// create model
var data = new MyData({ var:myVars, id: id });
// fetch data
data.fetch({async: false});
//...
}
);
我正在构建一个使用 RequireJS 和 Backbone 的单页应用程序。 我有多个数据端点,我使用 Backbone 来管理。
我有一个构建 URL 的集合,并在获取 URL 之前将唯一 ID 附加到 URL。
集合定义如下:
define([
'underscore',
'backbone',
'models/MyModel'
], function(_, Backbone, MyModel){
console.log('test'+id);
var Data = Backbone.Collection.extend({
model: MyModel,
url: '/getData/?id='+id,
parse: function(response) {
return response;
}
});
return Data;
});
并且是这样使用的:
function retrieveData() {
require(['collections/MyData'],
function(MyData) {
// create model
var data = new MyData(var:myVars});
// fetch data
data.fetch({async: false});
//...
}
);
}
一切都相当简单。 但是,当我创建模型时出现了问题。 URL 用于查询服务器的 Id 在后台发生变化,当它发生时我调用 retrieveData() 。 在代码的第一遍中,模型被创建,并且我已经验证了这一点,因为 "console.log('test'+id);" 打印到控制台。 但是,当我再次调用 retrieveData() 时(在 id 更改后),代码被执行以创建一个新模型但不是创建一个新模型,Backbone 似乎 return 已经实例化的模型来自第一次通过,因此 URL 不会使用新 ID 进行更新。 "console.log('test'+id);" 不会首先在任何传递栏上打印到控制台,因为未创建对象且未输入函数。
我是不是连接了一些东西在工作,或者这里是否有某种缓存?
谢谢
您的问题似乎是您在创建集合原型时试图制作 id
,但创建 MyData
集合的代码只有 运行 一次。
更好的方法可能是在实例化期间提供 id
。
像这样:
define([
'underscore',
'backbone',
'models/MyModel'
], function(_, Backbone, MyModel){
var Data = Backbone.Collection.extend({
model: MyModel,
initialize: function(options) {
this.id = options.id;
},
url: function() {
return '/getData/?id=' + this.id
},
parse: function(response) {
return response;
}
});
return Data;
});
和
function retrieveData() {
require(['collections/MyData'],
function(MyData) {
// create model
var data = new MyData({ var:myVars, id: id });
// fetch data
data.fetch({async: false});
//...
}
);