gpt4 book ai didi

javascript - 使用 Solr 和 JsonRest 使用自定义 Dojo 小部件填充 OnDemandGrid

转载 作者:行者123 更新时间:2023-12-02 18:31:02 26 4
gpt4 key购买 nike

我有一个 OnDemandGrid,其中有一列,我想用我构建的自定义 Dojo 小部件填充该列。用于填充每个小部件的数据来自 Solr 查询。由于我预计可能有数千个搜索结果,因此我需要使用 JsonRest 对象来进行查询并处理分页。这是我到目前为止所拥有的:

商店:

var store = new JsonRest ({
target: "/solr/json/response",
});

创建网格:

var grid = new (declare([OnDemandGrid, Pagination])) ({
store: store,
getBeforePut: false,
columns: [
{
label: "Test",
field: "first",
renderCell: myRenderFunction //To render the custom widget
}
]
}, "grid");

grid.startup();

我的渲染函数:

var myRenderFunction = function(object, data, cell) {

var widget = new MyCustomWidget({
doc: object,
foo: bar
}, cell.appendChild(document.createElement("div"));

widget.startup();
return widget;
}

示例 Solr 响应,采用 JSON 形式:

{
"response":{
"docs":[
{
"foo": "Hello",
"bar": "World"
},
{
"foo": "Easy as",
"bar": "ABC"
},
{
"foo": "Simple as",
"bar": "Do re mi"
}
]
},
"highlighting": { ... },
"numFound": "74",
"start": 0
}

我遵循了一些在线示例,演示了如何使用 JsonRest 和任何 dgrid 风格(并且它们都有效)来执行此操作,但是当我尝试将小部件渲染到网格时,没有任何显示,并且我得到一个 类型错误:transform(...) 为 null

有什么原因导致我无法将小部件渲染到网格吗?

最佳答案

我在尝试将 Solr 结果与 dgrid 和 JsonRest 一起使用时遇到了同样的问题。
JsonRest使用 QueryResults 作为其返回内容的包装器。
你的问题是QueryResults仅接受数组或 Promise,并且您当前正在给它一个对象。

为了向 QueryResults 提供 docs 数组,请编写一个类似于以下内容的自定义 JsonRest 存储:

define([
"dojo/Deferred", "dojo/io-query", "dojo/_base/declare", "dojo/request/xhr",
"dojo/store/JsonRest", "dojo/store/util/QueryResults"
], function (Deferred, ioQuery, declare, xhr, JsonRest, QueryResults) {
return declare([JsonRest], {
target: '/solr/json/response',
idProperty: 'foo',
query: function (query, options) {
var results, total, count = options.count, start = options.start;
if (start > 0 || count >= 0) {
query.start = start;
query.rows = ((options.hasOwnProperty('count') &&
count !== Infinity) ? count : 25);
} else {
console.error('Missing start and count arguments');
return;
}
results = new Deferred();
results.total = new Deferred();
xhr(this.target, {
query: ioQuery.objectToQuery(query),
handleAs: 'json',
headers: {
Accept: this.accepts
}
}).then(function (data) {
total = data.response.numFound;
results.total.resolve(total);
results.resolve(data.response.docs);
}, function (e) {
console.error(e.response.status + '. ' + e.message);
});
return new QueryResults(results);
}
});
});

我还建议等待使用自定义 renderCell 函数,直到正确填充 dgrid 为止。

编辑:OnDemandGrid 无法与分页扩展一起使用。
因此,请决定是否需要谨慎的分页控件或无限滚动(由 dgrid 处理分页)。
请参阅PaginationOnDemand文档。

关于javascript - 使用 Solr 和 JsonRest 使用自定义 Dojo 小部件填充 OnDemandGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17790880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com