在模型中我有一些属性。 在我更改数据之后,我希望其中一个属性与另一个模型放在一个单独的集合中。
现在改变数据不是问题,我知道如何创建新对象。 但是我不知道最好的方法是:
我尝试了几件事情,从将完整属性发送到集合,我在那里有一个解析,它应该返回一个新对象。 然而,这失败了。
我也尝试对模型和解析进行相同的操作。
然后我尝试在集合的'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);
}
});
我只是怀疑这是否真的是正确的方法。 所以任何帮助和启示都会很棒: - )