【问题标题】:How to decide and make REST calls corresponding to parent-child relationship如何决定并进行父子关系对应的REST调用
【发布时间】:2013-11-05 10:20:54
【问题描述】:

我正在使用backbone.js 和Apache-CXF Rest-ful webservice。

我有一个树状结构(父子关系)的节点。

用户可以从前端 (UI) 为任何节点创建子节点。

那时我想打什么 REST 调用?

选项是:

  1. 一个PUT(更新)父请求,我可以调用更新父,到后端。

  2. POST(创建)子请求,我可以从后端调用创建子请求。

我的疑问是,我想使用这两个调用,或者有没有更好的方法?

var TreeModel = Backbone.Model.extend({

    defaults : {

        id : undefined,

        name : "", 

        children : [] 

    },

    urlRoot : '/api/tree'

});

是我的模特。

在我使用的 js 代码中:

   var parent = new Treemodel();

   ..... (some operations)  .....

   var child1 = new Treemodel();

   child1.save();

   parent.children.push(child1);

   parent.save();

有没有更好的方法?

【问题讨论】:

    标签: javascript jquery rest backbone.js cxf


    【解决方案1】:

    如果它适合你,你的方法看起来不错。

    我想到的另一个选择(虽然不比你的好多少)是只将子节点保存到服务器,然后 fetch() 父节点。这简化了您的客户端代码逻辑。

    代码是这样的:

    var parent = new Treemodel();
    
    [...]
    
    var child1 = new Treemodel();
    
    child1.save({
        success: function () {
            parent.fetch();
        }
    });
    

    无论如何,我建议您通过添加“成功”回调仅在子创建成功时保存父。您的代码将如下所示:

    var parent = new Treemodel();
    
    [...]
    
    var child1 = new Treemodel();
    
    child1.save({
        success: function () {
            parent.children.push(child1);
            parent.save();
        }
    });
    

    【讨论】:

    • 感谢您的回复。你的答案看起来不错。但两者几乎相似,对吧? “仅当子创建成功时才保存父”(回调中的 parent.save 看起来比我的代码更好。):)
    • 是的,它们非常相似。不同之处在于,在我的第一个选项中,您不会更改“父”模型对象的内容,但它会从服务器加载自身,如果您想让客户端从“思考”如何处理中解放出来,这可能会很好家长:让服务器来做。一种“保持简单”的风格。但是,如果您对自己的做法感到满意,我认为这没什么不好,:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2021-12-12
    • 2018-11-25
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多