我有一个外部(对组件),可观察的对象,我想听取更改.当对象更新时,它会发出更改事件,然后我想在检测到任何更改时重新呈现组件.
使用顶级React.render这是可能的,但在一个组件中它不起作用(这有一定意义,因为该render方法只返回一个对象).
这是一个代码示例:
export default class MyComponent extends React.Component {
handleButtonClick() {
this.render();
}
render() {
return (
<div>
{Math.random()}
<button onClick={this.handleButtonClick.bind(this)}>
Click me
</button>
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
单击按钮会在内部调用this.render(),但这不是实际导致渲染发生的原因(您可以看到此操作因为创建的文本{Math.random()}不会更改).但是,如果我只是打电话this.setState()而不是this.render(),它可以正常工作.
所以我想我的问题是: React组件需要有状态才能重新渲染吗?有没有办法强制组件按需更新而不改变状态?
我正在编写应用程序,如果用户在通话时查看应用程序,我需要更改视图.
我已经实现了以下方法:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"viewWillAppear:");
_sv.frame = CGRectMake(0.0, 0.0, 320.0, self.view.bounds.size.height);
}
Run Code Online (Sandbox Code Playgroud)
但是,当应用程序返回到前台时,它不会被调用.
我知道我可以实现:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
Run Code Online (Sandbox Code Playgroud)
但我不想这样做.我宁愿将所有布局信息放在viewWillAppear:方法中,让它处理所有可能的场景.
我甚至试图从applicationWillEnterForeground:调用viewWillAppear:但我似乎无法确定当前哪个是当前的视图控制器.
有人知道处理这个问题的正确方法吗?我确定我错过了一个明显的解决方案.

在Xcode 4中,我看到了我的目标摘要:
"Version"输入对应CFBundleShortVersionString于info.plist文件,"Build"输入对应于CFBundleVersion.
这两者有什么区别?我看到互联网上有很多人想要为两者提供相同的价值,我怀疑这是为了向后兼容.
我有两个问题:
1)如果我从头开始,那么对应用程序进行版本控制的最佳做法是什么?
2)在我的应用程序的所有先前版本中,我只使用过CFBundleVersion.为了不搞乱升级过程,我应该继续以CFBundleVersion同样的方式增加,还是可以切换到"正确的方式",假设一个存在?
Javascript通过引用传递对象.这很有道理.但是一旦你开始操纵这些物体,一切都会以一种看起来不直观的方式发挥作用.让我举一个例子:
var a, b;
a = {}
b = a;
a['one'] = {};
console.log( JSON.stringify(a) );
// outputs: {"one":{}}
console.log( JSON.stringify(b) );
// outputs: {"one":{}}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,因为现在b有一个指针,a所以预计分配东西a也会影响b.
但是如果我这样做:
a = a['one'];
console.log( JSON.stringify(a) );
// outputs: {}
console.log( JSON.stringify(b) );
// outputs: {"one":{}}
Run Code Online (Sandbox Code Playgroud)
这对我来说很惊讶.我期望a,并b仍然是相同的(并且是{}因为a['one']原先设置为{}和a设置为a['one']).
但事实并非如此.似乎a失去了b对它被赋予新内容的时间的引用,但b保留了a在a失去引用之前设置的值b.
但是如果我这样做:
a['two'] …Run Code Online (Sandbox Code Playgroud) 在窗口外拖动时,Firefox无法正确触发dragleave事件:
https://bugzilla.mozilla.org/show_bug.cgi?id=665704
https://bugzilla.mozilla.org/show_bug.cgi?id=656164
我正在尝试为此开发一种解决方法(我知道这可能是因为Gmail正在这样做),但我能想出的唯一的东西似乎真的很乱.
知道何时拖出窗外的一种方法是等待dragover事件停止发射(因为dragover在拖放操作期间不断发射).这就是我这样做的方式:
var timeout;
function dragleaveFunctionality() {
// do stuff
}
function firefoxTimeoutHack() {
clearTimeout(timeout);
timeout = setTimeout(dragleaveFunctionality, 200);
}
$(document).on('dragover', firefoxTimeoutHack);
Run Code Online (Sandbox Code Playgroud)
此代码实际上是一次又一次地创建和清除超时.除非dragover事件停止触发,否则将无法达到200毫秒的超时.
虽然这有效,但我不喜欢为此目的使用超时的想法.感觉不对.这也意味着在"掉落区"造型消失之前会有一点滞后.
我的另一个想法是检测鼠标何时离开窗口,但在拖放操作期间,这样做的正常方法似乎不起作用.
有没有人有更好的方法这样做?
更新:
这是我正在使用的代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Drag and Drop Issue</title>
<script src="http://code.jquery.com/jquery.js"></script>
</head>
<body>
Open up the console and look at what number is reporting when dragging files in and out of the window. The number should always be 0 when leaving …Run Code Online (Sandbox Code Playgroud) 我开发了一个iPhone应用程序,其中我使用公钥和私钥加密和解密数据.我想在Keychain中看到这个键.我在应用程序/实用程序下获得了mac应用程序的钥匙串条目,但是iPhone模拟器Keychain和iPhone上的Keychain在设备上的位置是什么.
根据Apple的文档,为了从我的应用程序拨打电话,我需要实现以下协议:
HTML链接:
<a href="tel:1-408-555-5555">1-408-555-5555</a>
Run Code Online (Sandbox Code Playgroud)
原生应用URL字符串:
tel:1-408-555-5555
Run Code Online (Sandbox Code Playgroud)
但是,在完成从UIWebView内的HTML链接发起的电话呼叫后,我将重定向到我的应用程序.但是在完成从本机应用程序URL字符串进行的电话呼叫后,我的iphone会保留在iphone的常规电话应用程序中,如果我想返回我的应用程序,我必须手动执行此操作.
据我所知,通过阅读其他人所说的话,没有办法改变这种行为.
这是我的问题:
我为什么这样做:
Array.prototype.foo = function() {
this.splice(0, this.length);
return this.concat([1,2,3]);
}
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
Array.prototype.foo = function() {
return this = [1,2,3];
}
Run Code Online (Sandbox Code Playgroud)
这两个函数都会破坏它的值并将其更改为[1,2,3]但第二个函数会抛出以下错误:Uncaught ReferenceError: Invalid left-hand side in assignment
我怀疑这是因为允许赋值意味着我可能会将数组更改为其他内容(如字符串),但我希望有人确切知道和/或有更详细的解释.
这就是我想要做的:
rsync -rvl --chmod=ug=rwX,o=rX test /var/www
Run Code Online (Sandbox Code Playgroud)
在我这样做之后,我得到的结果如下:
drwxr-xr-x
Run Code Online (Sandbox Code Playgroud)
(实际上它是drwxr-sr-x,但这可能并不重要......是吗?)
这显然不是我想要的.我希望该组具有写权限,但由于某种原因,rsync命令不设置它们.
任何人有任何想法为什么不呢?我的语法有错吗?如果它有用,我将从OSX转移到Linux(Debian).
更新: 此外,如果它有用,当我输入umask时,我得到0002.所以这不是问题.
我有一个全黑的UIImage,有一个alpha通道,所以有些部分是灰色的,有些部分是完全透明的.我希望将这些图像用作其他颜色的遮罩(让我们说白色以使其变得容易),因此最终产品现在是白色图像,其中部分透明.
但我对Quartz/Core Graphics完全不熟悉,所以我不能真正理解这些例子.
有谁知道我可以用来查看一些完整代码示例的链接?