Backbone将模型A中的数据添加到模型B的Collection中

时间:2014-11-26 11:42:45

标签: javascript backbone.js javascript-objects backbone-collections

在模型中我有一些属性。 在我更改数据之后,我希望其中一个属性与另一个模型放在一个单独的集合中。

现在改变数据不是问题,我知道如何创建新对象。 但是我不知道最好的方法是:

  1. 改变数据的位置
  2. 如何在我的收藏中获取它。
  3. 我尝试了几件事情,从将完整属性发送到集合,我在那里有一个解析,它应该返回一个新对象。 然而,这失败了。

    我也尝试对模型和解析进行相同的操作。

    然后我尝试在集合的'url'部分中返回对象。 但正如预期的那样,这也不起作用。之后我尝试将对象字符串化为json,但这也不起作用。

    所以现在我认为这可能是在收到数据之后开始更改模型A中的数据的最佳方式,然后将数据推送或添加到集合中。

    也许其他人有更好的想法这样做? 我怎么知道数据在模型A中,所以我可以开始运行脚本了?

    首先尝试收集:按网址

    SatPhotoDataCollection = Backbone.Collection.extend({
    
        model: SatPhotoDataModel,
    
        url: function() {
    
            var obj = satPhotoModel.attributes.Layer;
            var layerNames = {};
    
            for (var i = 0; i < obj.length; i+=1) {
    
                //do some massive things filling layerNames
    
            }
    
            return layerNames;
    
        }
    
    });
    

    同样的事情,不使用URL而是解析,使用以下方法将'satPhotoModel.attributes.Layer'发送到集合:

    SatPhotoDataCollection.add(satPhotoModel.attributes.Layer);
    
    
    SatPhotoDataCollection = Backbone.Collection.extend({
    
        model: SatPhotoDataModel,
    
        url: "",
    
        parse: function(data) {
    
            var layerNames = {};
    
            for (var i = 0; i < data.length; i+=1) {
    
                //do some massive things filling layerNames
    
            }
    
            return layerNames;
    
        }
    
    });
    

    当然我在URL和Parse中的模型satPhotoDataModel(模型B)中做了同样的事情,但是我必须返回的'layerNames'实际上是'layers'的集合,因此需要一个集合;)

    现在在satPhotoModel(模型A)中,它将具有Layer的属性,我也可以尝试类似:

    SatPhotoModel = Backbone.Model.extend({
    
        initialize: function() {
    
        },
    
        url: "http://geoservertest/geoserver/DIWADIS/ows?service=WMS&version=2.0.0&request=GetCapabilities",
    
        sync: function(method, model, options) {
    
            options.dataType = "xml";
            options.crossDomain = true;
            options.contentType = 'application/json; charset=utf-8';
    
            return Backbone.sync(method, model, options);
        },
    
        //we are expecting an XML since we want a normal object, we do this with parsing
        parse: function(data) {
    
            var obj = $.xml2json(data);
    
            this.parseLayers(obj.Capability.Layer);          
    
            return obj.Capability.Layer;
    
        },
    
        defaults: {
    
            Abstract: "",
            BoundingBox: {},
            CRS: [],
            Ex_GeographicBoundingBox: {},
            Layer: [],
            Tile: ""
    
        },
    
        parseLayers: function(data) {
    
    
            var layerNames = {};
    
            for (var i = 0; i < data.length; i+=1) {
    
                //do some massive things filling layerNames
    
            }
    
            SatPhotoDataCollection.add(layerNames);
    
    
        }
    
    });
    

    我只是怀疑这是否真的是正确的方法。 所以任何帮助和启示都会很棒: - )

0 个答案:

没有答案