在JQuery Mobile pageshow()事件上访问JSON数据
我正在一个单页JQuery移动网站上工作。当加载JSON数据并在客户端操作DOM时,JQuery初始化最初设置为false。加载内容并操作DOM后,JQuery Mobile将初始化 一旦初始化,我计划使用Ben Alman的replaceText插件将JSON放入输出HTML中的一些占位符中,这样像“XXFIRST_NAMEXX”这样的占位符就变成了“John Smith” 我还没有找到替换部分b/c,我无法从JQuery Mobile的pageshow()事件中访问JSON数据,即使是加载页面的事件序列中最后触发的事件 下面是我的代码的简化和注释版本。 我正在使用JQuery 1.7.1和JQuery Mobile 1.1.0 我错过了什么? 谢谢在JQuery Mobile pageshow()事件上访问JSON数据,jquery,json,jquery-mobile,initialization,undefined,Jquery,Json,Jquery Mobile,Initialization,Undefined,我正在一个单页JQuery移动网站上工作。当加载JSON数据并在客户端操作DOM时,JQuery初始化最初设置为false。加载内容并操作DOM后,JQuery Mobile将初始化 一旦初始化,我计划使用Ben Alman的replaceText插件将JSON放入输出HTML中的一些占位符中,这样像“XXFIRST_NAMEXX”这样的占位符就变成了“John Smith” 我还没有找到替换部分b/c,我无法从JQuery Mobile的pageshow()事件中访问JSON数据,即使是加载页
我不完全确定发生了什么,但您是否希望传递到“pageshow”回调中的“data”参数与“getJSON”回调中的“data”变量相同?它们是不同的对象,恰好两者都被命名为“数据”。“pageShow”中的一个只有一个“prevPage”属性,该属性包含对DOM元素的引用,该元素表示刚刚导航离开的页面。getJSON回调中的一个包含您从数据源获得的实际数据;一旦回调完成执行,它就消失了 如果无法在JSON回调中完成所有这些初始化,那么可以尝试使用jQuery的data()函数将所需的JSON位存储在页面中的某个DOM元素上
这有帮助吗?我在处理
data()
时遇到了困难,甚至jqmData()
都应该用它来代替data()
。从文档中:
在使用jQuery Mobile时,应使用jqmData和jqmRemoveData
用于代替jQuery核心的数据和removeData方法(注意
这包括$.fn.data、$.fn.removeData和$.data,
$.removeData和$.hasData实用程序),因为它们会自动
合并名称空间数据属性的获取和设置(即使
当前未使用任何命名空间)
为了克服这个问题,我将数据存储在getJSON回调中的LocalStorage中,然后可以从pageShow访问它。。。有意思,我不知道。不知何故,我错过了上一个项目的成功机会!:)这可能是一个相对较新的添加,我使用该框架的时间不长。但前几天我遇到了这个问题……是的,这确实有帮助!我不认为数据是两种不同的东西——一种是getJSON,另一种是pageShow。一旦我全局声明了dropin变量,并在getContent()中定义了它们,pageShow就有了它所需要的操作。非常感谢!
// jQuery Mobile initialization
$(document).bind("mobileinit", function () {
//prevent JQM from initializing until after content has been loaded in .getJSON callback;
$.mobile.autoInitializePage = false;
});
$( document ).bind( "pageshow", function( event, data ){
console.log('pageshow fires'); //fires 4th
//DROP-INS
//need to replace text within manipulated and initialized html
var resplaceScope, strDisplayName, strSchoolName, strOfferTitle;
replaceScope = $('body *');
//collect variables from json data
strOfferTitle = data.content.offer_vars.offer_title; //ERROR Uncaught TypeError: Cannot read property 'offer_vars' of undefined
replaceScope.replaceText( /XXOFFER_TITLEXX/gi, strOfferTitle );
});
$(document).ready(function(){
console.log('document.ready fires'); //fires 1st
$.getJSON('io_content.json', function(data) {
console.log('getJSON fires'); //fires 2st
getContent(data);
// ... once code is manipulated by getContent, Jquery is ready to initialize
$.mobile.initializePage();
});
function getContent(data){
console.log('getContent fires'); //fires 3rd
// ... code to manipulate content client side before jquery mobile initializes
}
});