我怎样才能确定所有收藏品都已填充?

时间:2013-05-26 22:01:02

标签: php javascript backbone.js laravel

在呈现任何视图之前,我需要填充我的所有应用程序的集合。然而,问题是,在我看到所有页面都已填充之前,有时我必须刷新页面几次。

作为一个例子,当我知道数据库中有空间时,有时房间集合是完全空的。在这种情况下,服务器响应为空。

这是一个精简的实现:

(function() {
    window.rooms = new App.Collections.Rooms();

    $.when(rooms.fetch()).done(function() {
        window.router = new App.Router;
        Backbone.history.start();
    });
}());

这是从服务器返回房间的代码:

public function get_index() {
    $rooms = Room::where('id_hostel', '=', Session::get('id_hostel'))->get();
    $response = array();

    foreach($rooms as $room) {
        $response[] = $room->attributes;
    }

    return json_encode($response);
}

实际上我不知道错误是在客户端还是在我编写的Laravel RESTful服务中。我该如何解决这个间歇性的问题?

1 个答案:

答案 0 :(得分:1)

如果您引用 - Collection fetch

,有几种方法可以解决这个问题

Sidney 已经提到了第一种方法,那就是使用fetchsuccess回调。

第二种方法是使用events,在我看来更好,因为你可以更容易地解码代码并提高可读性。

var rooms = window.rooms = new App.Collections.Rooms();
    rooms.fetch();
    ...
    rooms.on('sync', someFunction);

var rooms = window.rooms = new App.Collections.Rooms();
    rooms.fetch({reset: true});
    ...
    rooms.on('reset', someFunction);


someFunction () {
    window.router = new App.Router;
    Backbone.history.start();
}

我必须说这不是做事的首选“骨干方式”。我强烈建议您阅读Backbone Patterns