1

我试图fetch()一次调用多个,目前当我运行这个时:

function notWorking(){
    collection1.fetch()
    collection2.fetch()
    collection3.fetch()
    collection4.fetch()
}

如果我只有fetch()一个并且在其他 3 上返回 500 内部错误fetch() 但是,如果我运行这个:

function working(){
    collection1.fetch({
       success:function(){
            collection2.fetch({
               success:function(){
                    collection3.fetch({
                       success:function(){
                            collection4.fetch()
                       }
                    })
               }
            })
       }
    })
}

有效,但似乎是一种可怕的做法,一次拉多个是更好的方法fetch()吗?

(后端是使用带有 sinatra 和 datamapper 的 ruby​​ 来评估它的价值)

4

1 回答 1

0

正如 voithos 所建议的,您的核心问题是服务器端问题。Backbone(甚至在 jQuery 中)中没有任何东西可以阻止您一次进行多次提取。

话虽如此,如果您坚持使用服务器端实现,您至少可以通过利用 Backbone 的 fetch 返回 jQuery 的 ajax 返回结果(它本身是一个“延迟”对象)这一事实来清理您的代码):

function working(){
    collection4.fetch().complete(
        collection3.fetch().complete(
            collection2.fetch().complete(
                collection.fetch()));
}

或者,您实际上可以通过 fetch 将适当的选项传递给 jQuery,从而使 AJAX 请求同步,如下所示:

function working(){
    collection.fetch({async: false});
    collection2.fetch({async: false});
    collection3.fetch({async: false});
    collection4.fetch({async: false});
}
于 2013-01-02T19:50:30.890 回答