Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 美元。显然被忽视了_Javascript_Backbone.js_Marionette_Jquery Deferred - Fatal编程技术网

Javascript 美元。显然被忽视了

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。不过任务模型是呈现的。有时,

我有一个Compositeview,它表示一个任务列表,其标题包含该列表中任务的计数器

我已经为计数器定义了一个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);
             });
        }
}   
如您所见,我正在等待获取数据,但显然代码是在获取数据之前执行的。你知道我做错了什么吗

我的密码是:

控制器: 视图: 可以在这里看到。
如您所见,它严格遵循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中包含我的“实体/任务”。虽然我试过了,但没什么区别,现在已经解决了,谢谢!啊,好吧,错过了这一点,在这个问题上有了隧道式的视野