【发布时间】:2015-03-04 16:56:02
【问题描述】:
我有一个复合视图,它表示一个任务列表,其标题包含此类列表中任务的计数器。
我已经为计数器定义了一个 ui 哈希来处理它并正确初始化它:
观点:
ui: {
counter: "#counter",
},
onRender: function(){
this.ui.counter.text(this.collection.length);
}
我遇到的问题是,在呈现集合时,collection.length 有时为 0。任务模型虽然被渲染。有时,我的意思是有时 collection.length 将具有适当的值,有时则没有。这看起来像一个竞争条件。但是,我会确保在创建视图之前获取集合,显然是在显示它们之前。
我的控制器的简化示例如下所示:
showTasks: function(){
//layout
var kanbanLayout = new View.Layout();
//tasks
var backlogFetch = App.request("backlog:task:entities");
$.when(backlogFetch).done(function(backlogTasks){
var backlog = new View.Column({
collection: backlogTasks,
});
kanbanLayout.on("show", function(){
kanbanLayout.backlog.show(backlog);
});
App.once("fetched:kanban", function(){
App.mainLayout.mainRegion.show(kanbanLayout);
});
}
}
如您所见,我正在等待获取数据,但显然代码是在获取数据之前执行的。关于我做错了什么的任何想法?
我的完整代码:
- 控制器:https://github.com/mezod/multikanban/blob/master/app/scripts/apps/kanban/show/show_controller.js#L40
- 查看:https://github.com/mezod/multikanban/blob/master/app/scripts/apps/kanban/show/show_view.js#L421 可以在这里看到。
如您所见,它强烈遵循 David Sulc 的结构:https://github.com/davidsulc/structuring-backbone-with-requirejs-and-marionette/blob/master/assets/js/apps/contacts/show/show_controller.js#L13
【问题讨论】:
-
App.request()真的返回Deferred吗? -
我的钱用于请求返回除延迟以外的其他内容,大多数情况下是因为请求不存在(这里的拼写方式不存在或 js 文件所在的请求驻留尚未加载,因此尚未设置),因此它只是未定义,因此直接进入运行
-
是的,你们是对的,我以错误的方式回报承诺
标签: javascript backbone.js marionette jquery-deferred