NodeJS + Backbone:如何返回空数据并在Backbone / Marionette中显示空视图

时间:2013-10-29 11:25:08

标签: node.js backbone.js marionette

在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 Model获取Todo。一旦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);

现在的问题是:

我想在没有返回todo时呈现视图。我的意思是空木偶ItemView。或者在BackboneJS的情况下,我应该从服务器返回什么以便Backbone了解必须返回空视图?

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

2 个答案:

答案 0 :(得分: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.
});

答案 1 :(得分:0)

它没有延期工作,因为拒绝的承诺没有得到处理。在todo.fetch()中插入错误回调为

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

然后在

中处理错误回调
    $.when (fetching_todo).done (function (){}).fail (function (){});