Я пытаюсь сделать что-то похожее на this question, но используя OnDemandList вместо OnDemandGrid.Виджеты внутри Dojo dgrid OnDemandList
Вот то, что я до сих пор
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dgrid/OnDemandList",
"widget/CategoryItem",
"dojo/dom-construct",
"dojo/text!./templates/category-list.html"
], function(declare, _Widget, _TemplatedMixin, _WidgetsInTemplateMixin, OnDemandList, CategoryItem, domConstruct, template) {
var CatList = declare([OnDemandList]);
return declare([_Widget, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
baseClass: "category-list",
postCreate: function() {
this.inherited(arguments);
// Create OnDemandList, place in div defined in template.
var cat1 = this.cat1 = new CatList({
store: this.store,
renderRow: this.renderItem
}, this.categoriesLevel0);
},
renderItem: function(item) {
return new CategoryItem({
title: item.title
});
}
});
});
Проблема является моя функция renderItems должна каким-то образом вернуть РОМ, содержащий мой собственный виджет. Как сейчас, я получаю эту ошибку Error on domReady callback: Error: NotFoundError: DOM Exception 8
Очевидный вопрос: это виджет CategoryItem, который вы создаете когда-либо уничтоженным? Вы возвращаете узел DOM, который может быть очищен dgrid, уничтожая строку, но обычно объект Javascript, являющийся экземпляром dijit, уничтожается только путем вызова destroy() на нем. Обновление: нашел ответ на мой собственный вопрос: https://github.com/SitePen/dgrid/blob/master/doc/usage/Working-with-Widgets.md - по существу, подключиться к 'removeRow' на dgrid и вызовите destroyRecursive на cellElement.widget. Простой подход, показанный выше, содержит опасную утечку памяти. – Neek