Javascript Backbone.js从它获取集合';s初始化方法
有人为我们开发了一个应用程序,向我提供了代码,我可以浏览它, 我注意到了这一点,一开始似乎还可以,甚至可以让集合管理他的数据 但过了一会儿,我开始思考这个想法中可能存在的陷阱 因此: 从集合自己的initialize方法获取集合的数据是否是一种好的做法 例如:Javascript Backbone.js从它获取集合';s初始化方法,javascript,backbone.js,Javascript,Backbone.js,有人为我们开发了一个应用程序,向我提供了代码,我可以浏览它, 我注意到了这一点,一开始似乎还可以,甚至可以让集合管理他的数据 但过了一会儿,我开始思考这个想法中可能存在的陷阱 因此: 从集合自己的initialize方法获取集合的数据是否是一种好的做法 例如: var Book = Backbone.Model.extend({}); var Books = Backbone.Collection.extend({ url: '/books', initialize: fu
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()
)无论如何,依赖异步操作的顺序是一个非常糟糕的主意。换句话说,您的代码应该以与顺序无关的方式编写
我看到在各种项目中,initialize()
调用了fetch()
。我仍然认为这是不可取的和不好的做法。在需要时显式获取还具有以下优点:
var bookList, books = new Books();
var p = books.fetch();
p.done(function () {
bookList = new BookList({collection: books });
bookList.render();
});
感谢您的洞察力,我将要求他相应地编辑代码。在几点上你是对的,尽管我相信在他的情况下,当前应用程序只创建了一个集合,所以每次创建集合时加载并不是一个真正的问题,尽管我可以看到,当应用程序明年晚些时候进入2或3版时,它会成为一个问题,可能会添加其他集合。正如你在问题中暗示的那样,这是一个使用正确方法的问题。在
initialize
内部提取不会产生错误。这是无效的,丑陋的,原则上是错误的。@mu太短了,谢谢!我花了20分钟试图找出列表中的代码块,但失败了。我想念我的休息…我在SyncPanel组件中这样做。例如panel.load({tasks:{fetch:[books]},sync:function-doSomeThingWithBooks(){…})。这样处理并行调用和错误就容易多了。。。