San*_*der 14 javascript backbone.js
有人为我们建立一个应用程序,为我提供了代码,所以我可以通过它,我注意到这一点,起初看起来还不错,甚至很高兴让收集管理他的数据,但过了一段时间我开始考虑可能的陷阱在这个想法
所以:从它自己的初始化方法中获取集合的数据是一种好习惯.
例如:
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();
}
});
Run Code Online (Sandbox Code Playgroud)
我问这个是因为我认为在下列情况下可能会出现问题:
假设我们在routeAction中:
books: function() {
var books = new Books();
var bookList = new BookList({ collection: books });
}
Run Code Online (Sandbox Code Playgroud)
是不是这种情况可能失败,如果获取速度比视图初始化速度快,视图会绑定到重置事件,重置会在视图初始化执行之前触发?
我错了,或者我应该提交一张票来解决这个问题.
ggo*_*zad 21
虽然在实践中视图的初始化很可能在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();
});
Run Code Online (Sandbox Code Playgroud)它使测试更容易.
| 归档时间: |
|
| 查看次数: |
11013 次 |
| 最近记录: |