Backbone.js从中提取集合's初始化方法
Backbone.js fetch collection from it's initialize method
有人为我们构建了一个应用程序,向我提供了代码,以便我可以浏览它,我注意到了这一点,一开始似乎还可以,甚至让集合管理他的数据也很好但过了一段时间,我开始思考这个想法可能存在的陷阱
因此:从集合自己的initialize方法中获取集合的数据是一种好的做法吗。
例如:
var Book = Backbone.Model.extend({});
var Books = Backbone.Collection.extend({
url: '/books',
initialize: function(){
// do some logic here
// if collection is empty, fetch from server
if(this.size() == 0)
this.fetch();
}
});
我问这个问题是因为我觉得在以下情况下可能会有问题:
假设我们在一条路线上行动:
books: function() {
var books = new Books();
var bookList = new BookList({ collection: books });
}
这种情况难道不可能失败吗?如果获取比视图的初始化更快,视图会绑定到重置事件,重置会在执行视图初始化之前触发吗?
我错了吗,还是应该提交一张票来解决这个问题。
虽然在实践中,视图的初始化很可能会在fetch()
完成之前发生(并且您会将render()
绑定到reset
而不是initialize()
),但无论如何,依赖异步操作的顺序都是一个非常糟糕的主意。换句话说,您的代码应该以一种与顺序无关的方式编写。
我见过fetch()
在各种项目中被initialize()
调用。我仍然认为这是不可取和不好的做法。需要时显式提取也有以下优点:
- 你可以在需要的时候做,而不是每次创建新的收藏
-
如果你想,你可以按顺序做某些事情:
例如,只能在提取后初始化视图并进行渲染。
var bookList, books = new Books(); var p = books.fetch(); p.done(function () { bookList = new BookList({collection: books }); bookList.render(); });
-
它使测试更容易。
相关文章:
- 未捕获错误:无法在初始化之前调用方法;
- 为什么可以't我使用成员方法初始化一个实例
- 检查对话框是否为 Open 会引发“初始化前无法在对话框上调用方法”错误
- JQUERY对话框未捕获错误:初始化之前无法调用对话框上的方法
- 有没有一种方法可以获得用{}初始化的对象的原型
- 这是初始化快速点击的好方法吗
- 在ES2015中,如何确保所有方法都等待对象初始化?使用ES7装饰器
- JQuery 1.11.2 在初始化之前无法在对话框上调用方法;试图调用方法“销毁”
- 未捕获错误:初始化前无法在对话框上调用方法;尝试调用方法“打开”
- 初始化数据的正确方法
- 如何延迟对 javascript 对象的任何方法的所有调用,直到对象初始化
- “初始化前无法在工具提示上调用方法”错误,当我添加 jquery-ui 库时
- Ember.js - 在车把内初始化的视图中调用方法
- ReactJS - 在 react 类中初始化 jquery 插件的标准方法是什么
- 调用 Backbone 内部的外部函数.js的视图初始化方法
- 在 Backbone 中将函数设置为属性.js给了我一个错误,但如果我在初始化方法中设置它,它会起作用
- Backbone.js从中提取集合's初始化方法
- FXML,脚本标记和初始化方法
- 使用带有原型或对象初始化方法的angular指令
- 可以删除我的主干中的属性吗?模型's初始化方法,并将它们更改为模型的属性