2011-09-02 34 views
1

这是代码片段我:Javascript对象是不确定的

var records = Ext.data.Record.create([{name: 'msgId', type:'string', mapping: 'msgId'},]); 
... 
... 
var detailGrid = new Ext.grid.GridPanel({ 
    id:'detailGrid', 
    store: dataStore, 
    cm: new Ext.grid.ColumnModel({ 
    columns: [ 
     {id:'msgId',hidden: true, dataIndex: 'msgId'}, 
     {header: 'info',xtype: 'templatecolumn',tpl: '<a href="#" onClick = "viewMessage(records)">View Message Details</a>'} 
    ] 
}), 

当谈到onClick = "viewMessage(records)",我得到:'records' is undefined. 这里有什么问题?

编辑:给出的解决方案的工作,以消除错误。但是,当我把这样的功能:

function viewMessage(records){ 
alert(Ext.util.JSON.encode(records)); 
} 

我得到{}为警报,即没有数据。

+3

不知道,但你可能要在创建“记录”提醒其价值之一,以确保该对象已正确创建而不是默默地失败后,在1号线 – goatslacker

+0

权的末尾删除逗号一些原因。 –

+0

好的......在逗号后面有一些东西..我编辑了我的文章 – Victor

回答

0

也许这样的事情

'<a href="#" onClick = "viewMessage('+records+')">View Message Details</a>' 
+0

这会将'results'转换成一个字符串,而不会得到我想要的结果。 – pimvdb

+0

这可以消除错误。但不会产生预期的结果。请看我编辑 – Victor

+0

那么为什么这被标记为正确的答案? –

0

这与Ext.data.Record.create返回值的问题,如果你能提供什么Ext.data.Record.create不正是那我能够帮助您解决更多的上下文。

尝试在分配records变量后立即设置console.log(records);

0

基本上你只需要有一些方法来获得records的范围。

根据您的意见,这听起来像你有这样的结构 - 包含一个脚本文件:

function creategrid(){ 
    var records = Ext.data.Record.create.... 
    var detailGrid = new Ext.grid.GridPanel({... 
    {header: 'info',xtype: 'templatecolumn',tpl: '<a href="#" onClick = "viewMessage(records)">View Message Details</a>'} 
    ...}); 
} 

代码被执行,电网呈现后,你将有HTML相似,这对您的页:

<tr><td class="templatecolumncssclass"><a href="#" onClick="viewMessage(records)">View Message Details</a></td></tr> 

当你点击的锚标记,该viewMessage函数被调用,全局变量records作为其参数。这是行不通的,因为在你的代码片段中,记录不会被设置为全局变量。

你需要让records可以在页面的范围:

var GridCreation = {}; 
GridCreation.records = {}; 
GridCreation.creategrid = function(){ 
    var records = Ext.data.Record.create.... 
    GridCreation.records = records; 
    var detailGrid = new Ext.grid.GridPanel({... 
    {header: 'info',xtype: 'templatecolumn',tpl: '<a href="#" onClick = "viewMessage(GridCreation.records)">View Message Details</a>'} 
    ...}); 
}; 
+0

创建一个全局变量来解决问题是一个令人讨厌的建议 –

+0

全局变量只是为了说明解决方案。我会更清楚地说明,但是有了这样一个有限的代码片段,很难举出一个如何在海报中应用它的例子。 –

+0

如果你不知道你可以在列标题上收听Ext事件,那么是的,我可能会添加一个全局:p –

1

其他人已经解释了为什么它不工作...您的处理器期望的记录是一个全局变量,处理程序被调用,不知道从哪里得到记录。

你真正应该做的是设置一个监听你的数据模型的一个'headerclick就像

// EXT 4 version: wrap with Ext.onReady 
Ext.create('Ext.data.Store', { 
    storeId:'simpsonsStore', 
    fields:['name', 'email', 'phone'], 
    data:[ 
     { 'name': 'Lisa', "email":"[email protected]", "phone":"555-111-1224" }, 
     { 'name': 'Bart', "email":"[email protected]", "phone":"555-222-1234" }, 
     { 'name': 'Homer', "email":"[email protected]", "phone":"555-222-1244" }, 
     { 'name': 'Marge', "email":"[email protected]", "phone":"555-222-1254" } 
    ] 
}); 

Ext.create('Ext.grid.Panel', { 
    title: 'Simpsons', 
    store: Ext.data.StoreManager.lookup('simpsonsStore'), 
    colModel: { 
     listeners: { 
      headerclick: function(container, column, e, target, options) { 
       if (column.id == 'col-name') { 
        alert('Anything you want'); 
       } 
      } 
     }, 
     items: [ 
      { header: 'Name', dataIndex: 'name', id: 'col-name', sortable: false}, 
      { header: 'Email', dataIndex: 'email', flex: 1 }, 
      { header: 'Phone', dataIndex: 'phone' } 
     ]}, 
    height: 200, 
    width: 400, 
    renderTo: Ext.getBody() 
}); 

你提到你使用分机3,headerclick略有不同,它应该是设置在网格本身上,而不是在标题容器(列模型)中。喜欢的东西

var records = Ext.data.Record.create([{name: 'msgId', type:'string', mapping: 'msgId'},]); 
... 
... 
var detailGrid = new Ext.grid.GridPanel({ 
    listeners: { 
    headerclick: function(grid, index, e) { 
     if (index == 1) { 
     alert('Clicked Grid'); 
     } 
    } 
    }, 
    id:'detailGrid', 
    store: dataStore, 
    cm: new Ext.grid.ColumnModel({ 
    columns: [ 
     {id:'msgId',hidden: true, dataIndex: 'msgId'}, 
     {header: 'info',xtype: 'templatecolumn',tpl: '<a href="#">View Message Details</a>'} 
    ] 
}), 
+0

谢谢。但是“查看消息详细信息”不能用此代码进行点击。 – Victor

+0

通过点击,你的意思是没有下划线?或者当你点击它时,你的意思是什么都没有发生?你的评论并没有解释什么不起作用。我在我的机器上试过了,我可以点击标题并看到一个警告弹出窗口。 –

+0

没有下划线。当我点击'查看消息详细信息'文本时,我看不到警报。 – Victor