带有 jqgrid rowObject 的第一页结果返回预期数据,但随后返回结果页面的不完整数据。为什么?
结果第一页: rowObject[3] 将等于“2”
结果的后续页面: rowObject[3] 将等于“undefined”,返回结果的第一页现在也将等于“undefined”。
更多细节和一些代码:
使用 jqGrid,如果你想实现自定义格式化程序,你可以使用一个名为 rowObject 的参数,其中包含行数据。因此,例如,一行 rowObject 可能是这样的:
["18", "133", "Betelguese", "3", "photo.jpg", "", "0", ""]
所以我的自定义格式化程序使用其中一些数据来准备一个链接,如下所示:
var newval = '<a href="/proj/' + rowObject[3] + '/images/' + imgval + '">' + imgval + '</a>';
这给了我一个像这样的 url:
<a href="/proj/3/images/photo.jpg">photo.jpg</a>
到目前为止一切顺利。我的问题是,当我转到 jqgrid 中的下一页结果时,我丢失了一些数据并得到:
<a href="/proj/undefined/images/photo.jpg">photo.jpg</a>
如果我加载显示所有结果的页面,一切正常,但是如果我使用分页,只有第一页的结果将具有正确的 rowObject[3] 值,而后续页面上的所有其他结果将没有那个 rowObject 值!
那么,为什么 rowObject 包含有关最初加载到网格中的正确数据,但在下一页网格结果出现时似乎丢失了该数据?
我在 Firebug 中看到的一件事我不明白......当页面最初加载时我得到:
console.log(rowObject);
["18", "133", "Betelguese", "3", "photo.jpg", "", "0", ""]
在下一页的结果中,我发现一切都停止了,我看到了
console.log(rowObject);
Object { photo_id="18", site_id="133", more...}
为什么要改变?第一个结果是 json 那么为什么我现在得到这个对象?
最佳答案
我想你使用 loadonce:true选项。这是一个来自选项的问题,带来很多问题(主要是理解问题)。在 jqGrid 3.7 版本引入新的本地排序、分页和过滤(搜索)功能之前,本地和远程数据之间的分离很清楚。从 jqGrid 版本 3.7 开始 loadonce:true选项允许您在第一次加载时拥有的远程数据和稍后拥有的本地数据之间进行混合。在 another answer关闭问题已经讨论过了。在加载过程结束时出现 loadonce:true选项用法 datatype jqGrid 的将更改为 'local' .在那之后,很多事情都不同了。
我建议你使用jQuery.isArray(rowObject)作为一种快速有效的方法来确定您是否应该访问 rowObject每个整数索引 rowObject[3] (如果您访问远程数据)或每个命名属性 rowObject.projectId .
您可以使用$("#list").jqGrid('getGridParam','data') 查看整个本地数据, 它返回所有本地 rowObject 的数组.
如果您需要访问的数据(rowObject[3])没有保存在 jqGrid 的某些列中,那么您将看不到 rowObject 中的信息。 .在这种情况下,您可以为数据使用额外的隐藏列或在第一次加载时将数据保存在 loadComplete: function(data) { ... } 中。在任何外部对象中。你可以测试 $("#list").jqGrid('getGridParam','datatype')是'json' (或 'xml' 取决于您的服务器数据)如果为真,您可以将所需的服务器返回的所有数据(来自 data 数组的第 3 列)保存在对象的外部数组中。因此,稍后您将能够在自定义格式化程序中访问数据。
已更新:问题已在 free jqGrid 中解决jqGrid 的分支。自定义格式化程序(和 cellattr , rowattr )仍然包含 rowObject出于兼容性原因的参数,但存在附加 rowData解析数据保存为命名属性的属性:
formatter: function (cellValue, options, rowObject) {
// either rowObject[1] or rowObject.site_id,
// but options.rowData.site_id works ALWAYS
}
可以使用
cellattr: function (rowid, cellValue, rowObject, cm, item) {
// either rowObject[1] or rowObject.site_id,
// but item.site_id works ALWAYS
}
在cellattr .
关于javascript - jqGrid - rowObject 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4485970/
两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我希望特定模型的所有数据库交互都通过集群中的mongo主节点,因此我将模型设置为使用强一致性。classPhotoincludeMongoid::Documentwithconsistency::strongfield:number,type:Integer#let'ssayaphotonumberisuniqueinthedbvalidate:unique_numberend但这似乎不起作用,因为当我保存两张非常靠近的照片时,我仍然遇到验证错误。photo1#dbhasnumber=1forthisobjectphoto1.update_attributes(number:2)pho
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click
gemspec语义版本控制运算符~>(又名twiddle-wakka,又名pessimistic运算符)允许限制gem版本但允许进行一些升级。我经常看到它可以读作:"~>3.1"=>"Anyversion3.x,butatleast3.1""~>3.1.1"=>"Anyversion3.1.x,butatleast3.1.1"但是有了一个数字,这条规则就失效了:"~>3"=>"Anyversionx,butatleast3"*NOTTRUE!*"~>3"=>"Anyversion3.x"*True.Butwhy?*如果我想要“任何版本3.x”,我可以只使用“~>3.0”,这是一致的。就
🎉精彩专栏推荐💭文末获取联系✍️作者简介:一个热爱把逻辑思维转变为代码的技术博主💂作者主页:【主页——🚀获取更多优质源码】🎓web前端期末大作业:【📚毕设项目精品实战案例(1000套)】🧡程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作(110套)】🌎超炫酷的Echarts大屏可视化源码:【🔰Echarts大屏展示大数据平台可视化(150套)】🔖HTML+CSS+JS实例代码:【🗂️5000套HTML+CSS+JS实例代码(炫酷代码)继续更新中…】🎁免费且实用的WEB前端学习指南:【📂web前端零基础到高级学习视频教程120G干货分享】🥇关于作者:💬历任研发工程师,技术组长,教学总监;