我需要调试一个使用jQuery的Web应用程序来做一些相当复杂和混乱的DOM操作.有一次,某些与特定元素绑定的事件不会被触发,只是停止工作.
如果我有能力编辑应用程序源代码,我会向下钻取并添加一堆Firebug console.log()
语句并注释/取消注释代码片段以尝试查明问题.但我们假设我无法编辑应用程序代码,需要使用Firebug或类似工具完全在Firefox中工作.
Firebug非常善于让我导航和操纵DOM.但到目前为止,我还没有弄清楚如何使用Firebug进行事件调试.具体来说,我只想查看在给定时间绑定到特定元素的事件处理程序列表(使用Firebug JavaScript断点来跟踪更改).但是Firebug没有能力看到绑定事件,或者我太笨了而无法找到它.:-)
任何建议或想法?理想情况下,我只想查看和编辑绑定到元素的事件,类似于今天我可以编辑DOM的方式.
看到这段代码:
<html>
<head>
<script src="http://www.json.org/json2.js" type="text/javascript"></script>
<script type="text/javascript">
var jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
var jsonParsed = JSON.parse(jsonString);
console.log(jsonString, jsonParsed);
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在Firefox 3.5中看到我的控制台时,jsonParsed的值是:
Object id=714341252076979100 type=FUZZY
Run Code Online (Sandbox Code Playgroud)
即数字四舍五入.尝试了不同的值,相同的结果(数字舍入).
我也没有得到它的舍入规则.714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100.
编辑:请参阅下面的第一条评论.显然这不是关于JSON,而是关于JavaScript数字处理的东西.但问题仍然存在:
为什么会这样?
我正在尝试让MPNowPlayingInfoCenter在暂停播放时正常工作.(我有一个使用AVPlayer播放的流媒体音乐应用程序,我正在通过Airplay播放我的Apple TV.)除了暂停之外的所有内容似乎都在Apple TV UI中正确反映出来.我正在初始化它像这样:
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSDictionary *songInfo = @{
MPMediaItemPropertyTitle: title,
MPMediaItemPropertyArtist: artist
};
center.nowPlayingInfo = songInfo;
Run Code Online (Sandbox Code Playgroud)
由于我正在播放,因此在开始播放时我没有持续时间信息.当我从流中获得"就绪"信号时,我会更新Apple TV上正确显示的持续时间:
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo];
[playingInfo setObject:[NSNumber numberWithFloat:length] forKey:MPMediaItemPropertyPlaybackDuration];
center.nowPlayingInfo = playingInfo;
Run Code Online (Sandbox Code Playgroud)
当用户寻找音轨时,我也可以使用这种技术:
[playingInfo setObject:[NSNumber numberWithFloat:length * targetProgress] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的一件事是,如何暂停Apple TV上的播放头.当用户在我的UI中点击暂停时,我正在尝试执行以下操作:
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo];
[playingInfo setObject:[NSNumber numberWithFloat:0.0f] forKey:MPNowPlayingInfoPropertyPlaybackRate];
center.nowPlayingInfo = playingInfo;
Run Code Online (Sandbox Code Playgroud)
这不是暂停,而是将播放头追回到零并继续前进.
如何让播放头在Apple TV UI中正确暂停?
这里已经多次询问了这个一般性主题:如何使用不同数量的文本渲染UITableViewCells,从而改变高度.规范的答案是:使用sizeWithFont:constrainedToSize:lineBreakMode:在heightForRowAtIndexPath中计算表视图控制器委托中的高度.之后,单元格会被绘制出来,如果需要,你可以使用类似[label sizeToFit]的东西,而且所有工作都像魔法一样.
我的问题:我正在为一些单元格进行包装,因为sizeWithFont:从实际绘图返回不同的尺寸.
一个具体的例子:
文字是这样的:"人们忘记了@BillGates在1993年从NEC获得了性感的1/4英寸厚的板岩.本周发生的任何事情都不会与硬件有关!"
CGSize theSize = [text sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(310.0f, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
NSLog(@"calculated size for %@: %f, %f",text, theSize.width, theSize.height);
Run Code Online (Sandbox Code Playgroud)
返回:306.000000,84.000000.(即4行,17px字体和4px行间距,21px前导.)好.
但是,稍后实际绘制单元格时:
label = (UILabel *)[cell viewWithTag:3];
label.text = [NSString stringWithFormat:@"%@", text];
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont systemFontOfSize:17.0f];
CGSize labelSize;
labelSize = label.frame.size;
NSLog(@"label size before resizing: %f, %f", labelSize.width, labelSize.height);
[label sizeToFit];
labelSize = label.frame.size;
NSLog(@"label size after resizing: %f, %f for text %@", labelSize.width, labelSize.height,text);
Run Code Online (Sandbox Code Playgroud)
(UILabel是从NIB加载的UITableViewCell的一部分.在IB中我将其设置为310px宽.)
这应该返回与上面完全相同的大小.相反,我得到281.000000,10500.000000作为sizeToFit调用后的尺寸.它现在是绘制时间的5行而不是4行,文本溢出,我看到UI中的溢出效应.
因此,对于同一文本,我计算了两个不同的维度,并且无法弄清楚.这是关于UILabel的吗?它有一些内在的边缘吗?对于某些文本而言,这种情况不断发生,而其他文本却没有发生,我没有将其追溯到字符串的特定内容; 似乎随意.本主题强调有两个处理过程:计算高度与实际绘图.这与我所看到的一致.但我不明白究竟发生了什么或如何解决它.
问题:为什么我看到两种不同的计算尺寸,我该如何解决?
设置:我有一个故事板设置,有两个简单的视图控制器A和B.A中有一个按钮,它转换为B模式segue.B在A之上呈现模态转换.没关系.
问题:有没有办法让B离开并用一些简单的故事板魔法回到A?
请注意,如果这一切都在导航控制器中,并且我使用了推送segue,那么它将被导航控制器隐含地处理.会有一个"后退"按钮.没有类似的模态,我需要自己构建UI,这很好,但我想知道是否有一个segue机制我可以用来发信号从B回到A.
现在构建从B到A的oldskool方法将是:
这可行,但感觉太多开销和愚蠢.
是否有一些我错过的UIStoryboard机制,基本上会做一个"反向模态segue"?
我看看ExtJS,它似乎提供了许多RIA功能,如Flex提供的更大容量的套件,没有闪存要求.但是,随着jQuery-UI这样的开源式主题的继续,ExtJS会在某种程度上死掉吗?此外,由于闪存渗透率只会继续增加,为什么要将库存放入javascript库?
也就是说,像jQuery这样的JavaScript库在提供易于使用的API方面取得了巨大的飞跃,因此可能有一些优点.
思考?意见?ExtJS有价格标签,所以我不得不问这个问题.
我对Backbone.js有点新鲜,但我已经为它所做的一切印象深刻,并且我正在努力学习现在的模式和最佳实践.
我有两个集合:
var CollA = Backbone.Collection.extend({
model: ModelA,
url: '/urlA'
});
var CollB = Backbone.Collection.extend({
model: ModelB,
url: '/urlB'
});
var collA = new CollA;
var collB = new CollB;
Run Code Online (Sandbox Code Playgroud)
加载我的应用程序时,我需要从服务器获取这两个集合,并在确保两个提取都已完成时运行一些引导代码.
以下是我现在的表现:
collA.fetch({success: function() {
collB.fetch({success: function() {
// run the needed code here.
}});
}});
Run Code Online (Sandbox Code Playgroud)
这样可以保证只有在两次提取成功完成后才能运行所需的代码.然而,这显然效率低下,因为取件一个接一个地连续运行.
什么是更好的模式来执行此操作,并行运行提取,然后在两次提取成功完成后运行一些代码?
我遇到了jQuery手风琴的问题.当我创建一个内容窗格,其中非默认窗格的内容多于默认窗格,并且autoHeight为true时,这会在切换窗格时提供很好的动画,但非默认窗格会获得我不想要的滚动条.
您可以通过访问http://jqueryui.com/themeroller/,切换到"Blitzer"或"Humanity"等主题,然后打开示例手风琴的第3部分来看到这一点.使用Safari 3.2.1和Firefox 3.0.8发生在我身上.
如果切换到autoHeight = false,则不会发生这种情况,并且所有内容窗格都具有正确的高度,但内容窗格仅在动画结束时呈现并且看起来很奇怪,所以我不得不关闭动画以避免这种陌生感.
我要误读一些东西,或者这是jQuery UI手风琴中的一个错误.请帮我弄清楚它们中的哪一个(或两者都是).
我正在测试我的iPhone应用程序,其中一些人通过iTunes与我提供的移动配置文件一起安装它.Apple对于如何从这些人获取崩溃日志有很好的指导,但它是否也可以从他们的设备获取控制台日志?我没有这些人的物理访问权限,否则我可以将他们的设备连接到我的计算机并在管理器中看到控制台登录.我想给他们指示,让我得到他们的控制台日志,但似乎没有办法?
但是,AngleBetweenLines存在问题.结果总是积极的.我需要检测正角度和负角度,因此如果一条线在另一条线"高于"或"低于"15度,则形状显然看起来不同.
我的配置是一条线保持静止,而另一条线旋转,我需要通过将它与固定线进行比较来了解它旋转的方向.
编辑:为了回应下面swestrup的评论,情况实际上是我有一条线,我记录了它的起始位置.然后该线从其起始位置旋转,我需要计算从其起始位置到当前位置的角度.例如,如果它顺时针旋转,则为正旋转; 如果逆时针,则为负.(或相反亦然.)
如何改进算法,使其根据线的位置返回正负角度?
javascript ×3
iphone ×2
2d ×1
accordion ×1
airplay ×1
avplayer ×1
backbone.js ×1
cocoa-touch ×1
concurrency ×1
extjs ×1
firebug ×1
geometry ×1
ieee-754 ×1
ios ×1
jquery ×1
jquery-ui ×1
math ×1
testing ×1
uilabel ×1
uistoryboard ×1
uitableview ×1