【发布时间】:2014-09-09 17:24:25
【问题描述】:
当我启动我的 UserList(集合)时,我会从我的 API 中获取我的所有用户(模型)。
接下来发生的事情是我想要阻止的。
似乎集合随后会为每个模型初始化每个模型,这会触发模型的 .fetch()。
为什么会这样,我不知道。我所做的就是从我的收藏中调用 .fetch() 。
代码如下:
var UserList = Backbone.Collection.extend({
model: UserModel,
url: 'api/user',
initialize: function() {
this.fetch();
}
});
var UserModel = Backbone.Model.extend({
urlRoot: 'api/user',
defaults: {
username: '',
first_name: '',
last_name: ''
},
initialize: function() {
if(this.id) {
this.fetch();
}
}
});
如何防止新添加的模型再次被 .fetch() 访问?我已经从集合初始化时所做的第一个 .fetch() 中获得了我需要的所有数据。
我仍然希望 UserModel 默认在 .initialize() 上使用 .fetch(),因为当我尝试在 Web 应用程序中查看单个用户时。当我尝试查看用户列表时,我只是不希望它这样做。
【问题讨论】:
-
如果你只想获取一个用户模型,那么不要在模型初始化中再次获取它
-
当我初始化一个 UserView 时,我希望连接到该 (UserModel) 的模型从 API 获取数据。但是,当我初始化 UserListView 并将一个新的 UserList(它是一个集合)传递给它时,我会在对 API 的一个 GET 请求中获取要添加到集合中的所有模型数据。但是随后该集合显然在它创建并添加到自身的每个模型上运行 .initialize() ,这会在每个模型上触发另一个 .fetch() ,这是我不想要的。如果列表包含 10 个模型,则意味着应用程序执行了 11 个 API 调用。这是我不想要的。
-
您的数据已经存在于集合中,因此您不需要再次获取它,从集合中获取模型并将其分配给视图
-
我删除了模型的 .initialize() 中的 .fetch(),而是在我初始化了一个传递了 id 的 UserView 之后添加了一个 .fetch()。 --- that.view = new UserView({ model: new UserModel({ id: id }) }); --- that.view.model.fetch(); --- 看起来很丑。必须以其他方式解决此问题。
-
如果您已经为您的收藏品提取了它,为什么还需要再次提取它仍然不清楚。
标签: javascript backbone.js view collections model