Javascript 对于带主干的深层数据结构有什么建议吗?

Javascript 对于带主干的深层数据结构有什么建议吗?,javascript,backbone.js,Javascript,Backbone.js,我的脊梁骨有点头痛。我有一个指定记录的集合,其中有子记录,例如:外科医生有计划的手术,手术有设备,一些设备有耗材需求(气体、液体等)。如果我有一个主干集合外科医生,那么每个外科医生都有一个模型——但他的程序、设备和消耗品在从JSON解包后都将是普通的Javascript数组和对象 我想我可以在SurgeOnCollection中使用parse()生成新的ProcedureRecolutions,然后生成新的EquipmentCollections,但过了一段时间,这就变成了一个毛球。为了让它在服

我的脊梁骨有点头痛。我有一个指定记录的集合,其中有子记录,例如:外科医生有计划的手术,手术有设备,一些设备有耗材需求(气体、液体等)。如果我有一个主干集合外科医生,那么每个外科医生都有一个模型——但他的程序、设备和消耗品在从JSON解包后都将是普通的Javascript数组和对象

我想我可以在SurgeOnCollection中使用parse()生成新的ProcedureRecolutions,然后生成新的EquipmentCollections,但过了一段时间,这就变成了一个毛球。为了让它在服务器端变得合理,有一个单一的联系点,需要一个外科医生和他的东西作为一个帖子——因此自动在ConsumableModel上传播“set”以触发层次结构下的“save”,也使得整个层次结构方法变得模糊


还有其他人遇到过这样的问题吗?您是如何解决的?

我会将不同的外科医生、手术、设备等分离出来,作为web服务中的不同资源。如果只需要更新特定程序的设备,则可以更新该程序


另外,如果您并不总是需要所有信息,我也会根据需要延迟加载数据,但在需要的地方发送完全填充的对象以提高性能。

这对您的情况很有帮助:


指定关系1:1、1:n、n:n,它将相应地解析JSON。它还创建一个全局存储来跟踪所有记录。

因此,我解决此问题的一种方法是执行以下操作:

  • 让所有模型从自定义BaseModel继承,并在BaseModel中放置以下函数:

        convertToModel: function(dataType, modelType) {
            if (this.get(dataType)) {
                var map = { };
                map[dataType] = new modelType(this.get(dataType));
                this.set(map);
            }
        }
    
  • 重写Backbone.sync,首先让模型按正常方式序列化:

    set(响应,{silent:true})

  • 然后检查模型是否具有onUpdate功能:

                if (model.onUpdate) {
                    model.onUpdate();
                }
    
  • 然后,每当您有一个要生成子模型和子集合的模型时,请在模型中使用以下内容实现onUpdate:

            onUpdate: function() {
                this.convertToModel('nameOfAttribute1', SomeCustomModel1);
                this.convertToModel('nameOfAttribute2', SomeCustomModel2);
            }
    

  • 这是另一个可能的解决方案。主干关系几乎完全是我梦想的答案。我很早就走上了这条路,但这是经过深思熟虑的,更优雅。我只想指出,您的建议虽然值得称赞,但却违背了RESTful界面的目的,在RESTful界面中,粗略的文档(在本例中是过程)在服务器和客户端之间来回传递。