【问题标题】:NodeJS + Backbone: How do I return empty data and display with an Empty View in Backbone/MarionetteNodeJS + Backbone:如何返回空数据并在 Backbone/Marionette 中以空视图显示
【发布时间】:2013-10-29 11:25:07
【问题描述】:

在 NodeJS 中,我有一个 api,可以为我提供待办事项的数据:

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 后,我会用新的 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 不会发送任何内容。

【问题讨论】:

    标签: node.js backbone.js marionette


    【解决方案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.
    });
    

    【讨论】:

    • 它返回一个状态码,当我使用失败方法结合 $.ajax 时也会失败。但是,延迟它不起作用。我在这里做错了吗? var todo = new Entities.Todo({ _id: _id }); var defer = $.Deferred(); todo.fetch({ 成功: 函数 (数据) { defer.resolve(data); } }); return defer.promise();
    【解决方案2】:

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

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

    然后在

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多