Nu sunt sigur dacă fac eu ceva greșit, dacă e un bug în… nici nu știu unde sau altceva. Am încercat să fac pack și cu webpack și cu browserify (ca să exclud vreun bug în packer) și am exact aceeași problemă: dacă fac require
la un modul recursiv, nu îl găsește (îmi întoarce un obiect gol).
Ce vreau eu să fac: pentru moment, vreau să generez liste (UL/LI) dintr-un obiect nested.
Ce se întâmplă: când sunt la prima iterație (sau nu sunt copii), totul e ok. Copiii sunt cei care aduc problemele (hmmm, asta sună aiurea) pentru că UL-ul nu mai există:
Object {}
Uncaught TypeError: UL is not a constructor
Problema cea mai ciudată este că se rezolvă dacă fac require
în metoda addChildren
…
Codul care reproduce toată povestea:
// app.js
var UL = require('./ul.js');
var LI = require('./li.js');
var col = require('./col.js');
var c = new col([{}, {children: [{},{},{}]}, {}]);
var u = new UL({
collection: c
});
// model.js
module.exports = Backbone.Model.extend({ defaults : { children: 0 } });
// col.js
var model = require('./model.js');
module.exports = Backbone.Collection.extend({ model : model });
// ul.js
var LI = require('./li.js');
module.exports = Backbone.View.extend({
initialize: function(){
this.collection.each(this.renderItems, this);
return this;
},
renderItems: function(model, i){
var item = new LI({ model: model }).render().$el;
this.$el.append(item);
},
});
// li.js
var UL = require('./ul.js');
var col = require('./col.js');
module.exports = Backbone.View.extend({
initialize: function(){
if (this.model.get('children').length) { this.addChildren(); }
return this;
},
addChildren: function(){
var list = new UL({ collection: new col(this.model.get('children')) });
},
});