2016-02-09 5 views
0

Я новичок в backbone.js и унаследовал некоторый код с коллекцией, определенной внутри метода в представлении. Я хотел бы вытащить его в свой собственный модуль, но боюсь. Вот коллекция:backbone JS рефакторинг inline коллекция вне поля зрения

 ResourceCollection = AbstractCollection.extend({ 
      url: url, 
      model: ResourceModel, 
      state: state, 
      queryParams: BackgridUtils.getQueryParams({ 
       _queryFilter: 'true' 
      }, this.data.isSystemResource) 
     }); 
     this.model.resources = new ResourceCollection(); 

А вот что переработан модуль выглядит так далеко:

define("resource/ResourceCollection", [ 
"underscore", 
"main/AbstractCollection", 
"util/BackgridUtils" 
], function(_, AbstractCollection, BackgridUtils) { 
    var ResourceCollection = AbstractCollection.extend({ 
     url: url, 
     model: ResourceModel, 
     state: state, 
     queryParams: BackgridUtils.getQueryParams({ 
      _queryFilter: 'true' 
     }, this.data.isSystemResource) 
    }); 
    return new ResourceCollection; 
}); 

Как я могу создать экземпляр коллекции с моей точки зрения с соответствующими значениями? Заранее спасибо.

ответ

1

Вы должны вернуть фактический конструктор коллекции, а не только экземпляр этого объекта. Затем вы можете использовать этот «модуль» для создания экземпляров этой коллекции в другом месте приложения.

define("resource/ResourceCollection", [ 
    "underscore", 
    "main/AbstractCollection", 
    "util/BackgridUtils" 
], function(_, AbstractCollection, BackgridUtils) { 
    var ResourceCollection = AbstractCollection.extend({ 
    url: url, 
    model: ResourceModel, 
    initialize: function(models,options){ 
     //handle custome options here 
    }, 
    state: state, 
    queryParams: BackgridUtils.getQueryParams({ 
     _queryFilter: 'true' 
    }, this.data.isSystemResource) 
    }); 
    return ResourceCollection; 
}); 

Тогда из вашего зрения, вы можете создать экземпляры своей коллекции с динамическими данными, как

new ResourceCollection([],{ 
url: "some dynamic url" 
//some other custom options can be passed here 
}) 
Смежные вопросы