我正在 Android 手机上创建一个测试应用程序,它通过 ajax 从 Rails 服务器获取 json 数据。我已经在rails和带有PUBNUB的android手机之间设置了实时推送功能。rails 服务器是发布者,android 手机是订阅者。
问题:手机获取json格式的实时数据。但是,问题是我做不到multiple DOM manipulation INSIDE THE PUBNUB success callback
。这看起来绝对很奇怪。
当有实时更新时应该发生什么。
背景:
- 我有一个标题图像、一个 ui 栏、内容区域和一个页脚。
- 在 UI-Bar 中有一个通知图像。如果有任何新的报价,那么它应该亮成绿色,否则它会保持红色。
应该发生什么
因此,有任何实时推送的新报价,新报价应预先添加到列表中,并且通知图像应点亮为绿色。
实际发生了什么
Scenario 1
- 内容为空时,第一次推送,item正常推送,同时通知图片正常变为绿灯。我使用从订阅收到的json数据,并在html标签中使用,例如$('#some_id').html('some html tags with data received from subscription');
Scenario 2
说,您确认了通知,它又变回红色。现在,新场景是:我已经推送了一个项目并且通知图像已经被确认(红灯)。
- 现在,当第二个项目被推送时,该项目被正常推送,但通知图像没有变成绿灯。如果您按屏幕区域的任何位置,它只会变成绿灯。
Scenario 3
使用与 num 2 相同的场景,即列表中的一个报价和通知已被确认。
- 用户只有在下一次实时推送 4 次后才能看到绿灯,即列表中总共有 5 次。第五个触摸电话中的页脚。之后实时更新功能正常;将项目添加到列表中,并且通知图像在每次推送时变为绿色(如果之前为红色)。
Scenario 4
- 如果您不尝试将任何内容推送到列表中,而仅测试通知图像在每次成功推送时是否正常运行,那么它绝对可以正常工作。
TEST
在场景 2 中,我使用 alert 语句来查看 DOM 操作前后的通知图像。警报语句显示值的变化,但the visual does not change
.
alert($('#home_notification').html());
$('#home_notification').html('<img alt="Greenlight" height="31px" src="css/images/greenlight.png" class="notification_img" width="35px">');
alert($('#home_notification').html());
下面是来自 html 页面的我的脚本标签片段。
$(document).ready(function(){
PUBNUB.subscribe({
channel : "rails", // CONNECT TO THIS CHANNEL.
restore : false, // STAY CONNECTED, EVEN WHEN BROWSER IS CLOSED
// OR WHEN PAGE CHANGES.
callback : function(message) { // RECEIVED A MESSAGE.
var month=new Array();
month[0]="Jan";
month[1]="Feb";
month[2]="Mar";
month[3]="Apr";
month[4]="May";
month[5]="Jun";
month[6]="Jul";
month[7]="Aug";
month[8]="Sep";
month[9]="Oct";
month[10]="Nov";
month[11]="Dec";
//***************This is the offer that will get prepended in the list*************************
$('#offers_table').prepend('<tbody><tr class="offer_list_unread"><td class="spacer"><img alt="Spacer" src="css/images/spacer.png"></td><td class="image"><img height="60px" src="css/images/' + message['code'] + 'o.png" width="60px"></td><td class="description"><h3>'+ message['description']+ '</h3><p>Start Date: '+ month[(new Date(message["startdate"])).getMonth()] + ' ' + (new Date(message["startdate"])).getDate() +', '+ (new Date(message["startdate"])).getFullYear() +'</p><p>End Date: '+ month[(new Date(message["enddate"])).getMonth()] + ' ' + (new Date(message["enddate"])).getDate() +', '+ (new Date(message["enddate"])).getFullYear() +'</p></td><td class="mark_as_read"><img alt="Unread1" class="unread" src="css/images/unread1.png"><p class="read" style="display:none">offers/'+message['id']+'</p></td></tr></tbody>');
//**************************This is where I have am having issues****************************
//**************************THIS IS NOT SHOWN IN THE VISUALS AFTER SECOND REAL TIME PUSH********************************
$('#home_notification').html('<img alt="Greenlight" height="31px" src="css/images/greenlight.png" class="notification_img" width="35px">');
}
});
});