2016-10-23 25 views
3

マップを作成するためのウェブサイトを作成しました。したがって、すべてのマップにはidがあり、マップにはIDを持ついくつかの要素があります。コレクションIDとモデルIDを持つURLを取得する方法

だから私は、idのコレクションマップを作成し、そのモデルは、私のマップオブジェクトである:

app.collections.mapDetailsCollection = Backbone.Collection.extend({ 
    model: app.models.mapDetailsModel, 
    initialize: function(options) { 
     this.id = options.id; 
    }, 
    url: function() { 
     return this.absURL + '/api/maps/' + this.id; 
    }, 
    parse: function(response){ 
     return response.features; 
    }, 
    toGeoJSON: function(){ 
     var features = []; 
     this.models.forEach(function(model){ 
      var feature = model.toGeoJSON(); 
      if (! _.isEmpty(feature.geometry)) { 
       features.push(feature); 
      } 
     }); 
     return { 
      'type': 'FeatureCollection', 
      'features': features 
     }; 
    } 
}); 

しかし、私のモデルでは、あまりにもIDを持っています。コレクションIDを持つURLを返す方法をモデルではわかりません。

私は/api/maps/id_collection/id_modelを返す必要があります。

答えて

2

モデルをコレクションに追加すると、モデルはコレクションへの参照を受け取ります。したがって、各モデルには、コレクション内にあるコレクション属性this.collectionが設定されています。バックボーンmodel constructorドキュメント(強調鉱山)から

あなたはオプションとして{collection: ...}を渡すと、モデルは、 モデルが所属するコレクションを示すために使用されます collection財産を獲得モデルのurlの計算に役立ちます。 最初にモデルをコレクションに追加すると、通常 model.collectionのプロパティが自動的に作成されます。逆の場合は、 このオプションをコンストラクタに渡すと自動的にコレクションにモデル が追加されないので注意してください。役に立った、時々。

その後、あなたは、モデルの完全なURLを構築することを使用することができます。

var app.models.mapDetailsModel = Backbone.Model.extend({ 
    urlRoot: function() { 
     // Backbone adds the model id automatically 
     return this.collection.url() + '/my-model/'; 
    } 
    // ...snip... 
}); 

注モデルのデフォルトのURLは、あなたが望むものであること。

フォームのURLを生成します。デフォルトで[collection.url]/[id]、しかし あなたは、モデルの コレクションは考慮すべきでない場合は、明示的なurlRootを指定することで無効にすることができます。

+0

ありがとうEmile! それは私の問題を解決します。 –

関連する問題