Javascript 美元。显然被忽视了
我有一个Compositeview,它表示一个任务列表,其标题包含该列表中任务的计数器 我已经为计数器定义了一个ui哈希来处理它并正确初始化它: 观点:Javascript 美元。显然被忽视了,javascript,backbone.js,marionette,jquery-deferred,Javascript,Backbone.js,Marionette,Jquery Deferred,我有一个Compositeview,它表示一个任务列表,其标题包含该列表中任务的计数器 我已经为计数器定义了一个ui哈希来处理它并正确初始化它: 观点: ui: { counter: "#counter", }, onRender: function(){ this.ui.counter.text(this.collection.length); } 我遇到的问题是,在呈现集合时,collection.length有时为0。不过任务模型是呈现的。有时,
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);
});
}
}
如您所见,我正在等待获取数据,但显然代码是在获取数据之前执行的。你知道我做错了什么吗
我的密码是:
控制器:
视图:
可以在这里看到。
如您所见,它严格遵循David Sulc的结构:您需要定义任务实体,否则不会请求此文件,因此不会设置处理程序
define([
'app',
'apps/kanban/show/show_view',
'entities/task'
], function(App, View){
令人恼火的是,当您请求一个不存在的处理程序时,木偶不会告诉您。正如@hindmost在评论中建议的那样,我三次检查了承诺是否正确返回,但没有返回,运行代码如下所示:
var API = {
getTasks: function(state, kanban_id){
Entities.tasks = new Entities.TaskCollection([], {'state' : state, 'kanban_id': kanban_id});
var defer = $.Deferred();
Entities.tasks.fetch({
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization','token '+App.loggedInUser.token);
},
success: function(data){
defer.resolve(data);
}
});
var promise = defer.promise();
return promise;
}
App.request真的返回延期吗?我的钱在请求中返回延期之外的其他东西,大多数情况下,这是因为请求不存在,或者它的拼写方式不存在,或者请求所在的js文件没有加载,所以没有设置,所以它只是未定义,直接进入运行状态是的,你们是对的,我以错误的方式返回了承诺,我要求在Show.Controller中包含我的“实体/任务”。虽然我试过了,但没什么区别,现在已经解决了,谢谢!啊,好吧,错过了这一点,在这个问题上有了隧道式的视野