Javascript 未调用renderCell函数?
我正在学习dgrid的基础知识,我最感兴趣的功能之一是能够在网格单元中呈现dom元素。我正在使用一个商店,这是我看过的所有例子都没有用到的东西,而且我还没有能够模仿这些例子让事情正常工作。以下是我的工作内容:Javascript 未调用renderCell函数?,javascript,dojo,dgrid,Javascript,Dojo,Dgrid,我正在学习dgrid的基础知识,我最感兴趣的功能之一是能够在网格单元中呈现dom元素。我正在使用一个商店,这是我看过的所有例子都没有用到的东西,而且我还没有能够模仿这些例子让事情正常工作。以下是我的工作内容: function testRenderCell(object, value, node, options) { var div = document.createElement("div"); div.className = "renderedCell"; div.
function testRenderCell(object, value, node, options) {
var div = document.createElement("div");
div.className = "renderedCell";
div.innerHTML = "test";
return div;
};
var jsonObj=
{
columns : [{label: "Test", field: "test", width: "150px", renderCell: testRenderCell}],
data : []
};
grid.set("columns", jsonObj.columns);
var dataStore = new Observable(Memory({idProperty: "id", data: jsonObj.data}));
grid.store = dataStore;
在使用REST调用结果调用的函数中:
for (var i = 0; i < reply.length; i++) {
dataStore.put({
test: reply[i],
},
{id:i}
);
for(变量i=0;i
但是,dgrid仅将内容呈现为[object],这显然意味着存储区中的原始数据正在单元格中呈现,而renderCell没有被调用。也许我误解了renderCell函数的调用方式/时间,或者我只是犯了一个愚蠢的错误。无论如何,任何帮助都将不胜感激!我刚刚使用您的网格运行了整个过程,并测试了您的状态nder cell函数,只使用您的示例替换所有列,但显然选择了他们使用的json中包含的字段名。这是一个很好的处理方法。就我提到的一个例子来说,它可能会有所帮助,它不包括renderCell,但这是一个很好的起点 要在返回的div中显示数据中的一些值,我可以选择要在返回的html中显示的value参数,如下所示
function testRenderCell(object, value, node, options){
var div = document.createElement("div");
div.className = "renderedCell";
div.innerHTML = value;
return div;
}
这是我自己的索引文件中的代码片段,我使用的数据只是我复制到系统中的数据的本地版本
require([
"dojo/request",
"dojo/store/Memory",
"dgrid/OnDemandGrid"
], function (request, Memory, OnDemandGrid) {
function testRenderCell(object, value, node, options){
var div = document.createElement("div");
div.className = "renderedCell";
div.innerHTML = value;
return div;
}
request("/DGridTests/data.json", {
handleAs: "json"
}).then(function (response) {
// Once the response is received, build an in-memory store with the data
var store = new Memory({ data: response });
// Create an instance of OnDemandGrid referencing the store
var grid = new OnDemandGrid({
store: store,
columns: [
{
label: "Test",
field: "first",
width: "150px",
renderCell: testRenderCell
}
]
}, "grid");
grid.startup();
});
});
可以找到网格的文档和renderCell函数的详细信息
您的[Object]呈现内容可能有几个原因,第一个可能是检查您是否也在使用“formatter”,因为这将覆盖“renderCell”
第二种方法是确保在进入renderCell函数时看到的值或字段不是对象本身,您可能需要拉出所需的变量
第三个问题是网格不喜欢注入列的方式,可能会稍微回溯,并将代码重构为更简单的语法,将列作为网格构造函数参数的一部分添加,如我的代码片段中所示。您可以在以后添加复杂性
我希望这会有所帮助,如果我想到其他任何东西,我会补充更多,祝你好运
[更新]
好的,阅读David的回答,我尝试不返回任何内容,而只是更改节点。这似乎有效,下面是更改为执行此操作的函数。我不确定是否喜欢不返回任何内容,函数正在执行的操作不太明显,但它仍然有效,这很酷
function testRenderCell(object, value, node, options){
node.innerHTML = value;
}
我刚刚用你的网格运行了一遍,我测试了你的render cell函数,用你的示例替换了所有列,但显然选择了一个包含在他们使用的json中的字段名。这是一个不错的选择。拿我提到的一个例子来说,它可能会有所帮助,它不包括renderCell,但这是一个很好的起点 要在返回的div中显示数据中的一些值,我可以选择要在返回的html中显示的value参数,如下所示
function testRenderCell(object, value, node, options){
var div = document.createElement("div");
div.className = "renderedCell";
div.innerHTML = value;
return div;
}
这是我自己的索引文件中的代码片段,我使用的数据只是我复制到系统中的数据的本地版本
require([
"dojo/request",
"dojo/store/Memory",
"dgrid/OnDemandGrid"
], function (request, Memory, OnDemandGrid) {
function testRenderCell(object, value, node, options){
var div = document.createElement("div");
div.className = "renderedCell";
div.innerHTML = value;
return div;
}
request("/DGridTests/data.json", {
handleAs: "json"
}).then(function (response) {
// Once the response is received, build an in-memory store with the data
var store = new Memory({ data: response });
// Create an instance of OnDemandGrid referencing the store
var grid = new OnDemandGrid({
store: store,
columns: [
{
label: "Test",
field: "first",
width: "150px",
renderCell: testRenderCell
}
]
}, "grid");
grid.startup();
});
});
可以找到网格的文档和renderCell函数的详细信息
您的[Object]呈现内容可能有几个原因,第一个可能是检查您是否也在使用“formatter”,因为这将覆盖“renderCell”
第二种方法是确保在进入renderCell函数时看到的值或字段不是对象本身,您可能需要拉出所需的变量
第三个问题是网格不喜欢注入列的方式,可能会稍微回溯,并将代码重构为更简单的语法,将列作为网格构造函数参数的一部分添加,如我的代码片段中所示。您可以在以后添加复杂性
我希望这会有所帮助,如果我想到其他任何东西,我会补充更多,祝你好运
[更新]
好的,阅读David的回答,我尝试不返回任何内容,而只是更改节点。这似乎有效,下面是更改为执行此操作的函数。我不确定是否喜欢不返回任何内容,函数正在执行的操作不太明显,但它仍然有效,这很酷
function testRenderCell(object, value, node, options){
node.innerHTML = value;
}
我昨天刚开始使用dgrid。我使用了dojo.store.JsonRest,没有问题。但是,我怀疑该商店与您的问题有任何关系。我会尝试以下几种方法:
grid = new Grid({
store: Observable(JsonRest({
target: myUrl,
idProperty: 'id'
})),
columns: {
timestamp: {
label: 'Date',
renderCell: function (object, value, node, options) {
// Object is the row; i.e., object's properties are the column names
// value is the value for this cell
// node is the DOM node of this cell
// Not sure what 'options' refers to; I didn't need a fourth param
var dtg = new Date(value);
node.innerHTML = locale.format(dtg, {
datePattern: 'MM/dd/yyyy',
timePattern: 'HH:mm:ss'
});
// Notice I didn't return anything
}
}
}, 'my-grid');
希望这能有所帮助。我昨天刚开始使用dgrid。我使用了dojo.store.JsonRest,没有任何问题。但是,我怀疑该商店与您的问题有关。我会尝试以下几种方法:
grid = new Grid({
store: Observable(JsonRest({
target: myUrl,
idProperty: 'id'
})),
columns: {
timestamp: {
label: 'Date',
renderCell: function (object, value, node, options) {
// Object is the row; i.e., object's properties are the column names
// value is the value for this cell
// node is the DOM node of this cell
// Not sure what 'options' refers to; I didn't need a fourth param
var dtg = new Date(value);
node.innerHTML = locale.format(dtg, {
datePattern: 'MM/dd/yyyy',
timePattern: 'HH:mm:ss'
});
// Notice I didn't return anything
}
}
}, 'my-grid');
希望这能有所帮助。感谢您的帮助。我可以通过将列声明为网格来实现这一点,但我不知道为什么会有不同。我想,由于dgrid是一种相对较新的技术,它仍然有一些怪癖。感谢您的帮助。我可以通过声明列来实现这一点正如网格所声明的,虽然我不是苏尔