0

在 NodeJS 中,我有一个 api,它为我提供了 todo 的数据:

app.get('/api/todo/:_id' function (req, res, next) {
        Todo.findOne({ _id: req.params._id}, '', function (err, todo) {
            res.send(todo);
        });
    });

现在在 Backbone Marionette 中,我有 loading_view,然后我使用 Manager.request("todo:entity", _id) 从 Backbone 模型中获取一个 Todo。获取待办事项后,我会用新的 todo_view 覆盖此视图

Manager.todoPanel.show(loading_view);
var fetching_todo = Manager.request("todo:entity", _id);
$.when(fetching_todo).done(function (todo) {
     var todo_view = new Manager.TodoView({
          model: todo
     });
 Manager.todoPanel.show(todo_view);

现在的问题是:

我想在没有返回待办事项时渲染视图。我的意思是一个空的 Marionette ItemView。或者在 BackboneJS 的情况下,我应该从服务器返回什么以便 Backbone 了解必须返回一个空视图?

在这种情况下,只显示加载视图,因为如果我们找不到带有 _id 的 Todo,res.send 不会发送任何内容。

4

2 回答 2

1

尝试这样的事情:

app.get('/api/todo/:_id' function (req, res, next) {
    Todo.findOne({ _id: req.params._id}, '', function (err, todo) {
        if (err) return next(err);
        if (todo)
            res.send(todo);
        else
            res.send(404); //not found
    });
});

在客户端使用 .fail:

Manager.todoPanel.show(loading_view);
var fetching_todo = Manager.request("todo:entity", _id);
$.when(fetching_todo).done(function (todo) {
 var todo_view = new Manager.TodoView({
      model: todo
 });
Manager.todoPanel.show(todo_view);
}).fail(function (err) {
  //show a not found message.
});
于 2013-10-29T12:42:20.010 回答
0

它在延迟中不起作用,因为没有处理被拒绝的承诺。在 todo.fetch () 中插入错误回调为

    error: function () {defer.reject ('error message')}  

然后处理错误回调

    $.when (fetching_todo).done (function (){}).fail (function (){});
于 2013-10-29T15:06:06.337 回答