小编Rud*_*ski的帖子

测试JavaScript对象上是否存在属性的正确方法是什么?

我有一个我创建的自定义Javascript对象new,并根据创建参数分配属性:

function MyObject(argument) {
    if (argument) {
        this.prop = "foo";
    }
}
var objWithProp = new MyObject(true); // objWithProp.prop exists
var objWithoutProp = new MyObject(false); // objWithoutProp.prop does not exist
Run Code Online (Sandbox Code Playgroud)

测试prop对象属性是否存在的正确方法是什么?我已经看到了以下使用的方法,但我不确定这些方法中的任何一种是否是最佳方式:

  • if (obj.prop) {}
  • if (obj.hasOwnProperty("prop")) {}
  • if ("prop" in obj) {}

具体来说,我只对测试是否为该对象明确定义属性感兴趣,而不是在原型链中.此外,该值永远不会设置为nullundefined,但它可能类似于空对象或数组.但是,如果你想包括正确的方法,如果可能的话,请随意.

javascript properties object

21
推荐指数
2
解决办法
2万
查看次数

如何在不先删除数据库的情况下将带有rails的数据库迁移到第一个修订版?

我为我的Rails安装设置了一个数据库,并设置了一些迁移.我希望能够将我的数据库重置为没有表/约束/等等,但是在不知道迁移次数或第一次迁移的时间戳的情况下找不到合理的方法.我看到以下是我的选择:

  • rake db:migrate:reset
  • rake db:migrate:down VERSION=20090701154839 其中20090701154839是与第一次迁移相关联的时间戳
  • rake db:rollback STEP=15 那里有15次迁移

的问题db:migrate:reset在于,它第一次下降到数据库(它db:drop,db:createdb:migrate).

问题db:migrate:down是我不想编码开头的VERSION.

问题db:rollback是我不知道它回到开头的步骤数.

我有什么选择?

database migration rake ruby-on-rails

15
推荐指数
1
解决办法
6821
查看次数

在Bash中,如何运行多个无限运行的命令并使用^ C取消它们?

我想写一个运行一些不同的无限运行命令的脚本,例如

run_development_webserver.sh
watch_sass_files_and_compile_them.sh
watch_coffeescript_files_and_compile_them.sh
Run Code Online (Sandbox Code Playgroud)

我想并行运行每一个,并通过点击^ C杀死它们.这是可能的,如果是这样,我该怎么做?

bash signals process

13
推荐指数
1
解决办法
1627
查看次数

Django,request.user始终是匿名用户

我正在使用Django的自定义身份验证后端(运行couchdb).我有一个自定义用户模型.

作为登录的一部分,我正在做一个request.user = user并在会话中保存用户ID.但是,在后续请求中,我无法检索request.user.它始终是AnonymousUser.但是,我可以从会话中检索用户ID,并确认正确设置了会话cookie.

我错过了什么?

我不想使用关系数据库,因为我想在couchdb中维护我的所有用户数据.

编辑:我写了一个不从Django的auth用户继承的类.但它具有用户名和电子邮件属性.出于这个原因,我的后端不会返回一个派生自auth User的类.

django

10
推荐指数
3
解决办法
2万
查看次数

有时永远不会调用Game Center身份验证处理程序

在我们的iOS游戏中,我们使用Game Center来识别玩家并使用我们自己的服务器跨设备同步他们的数据.因为游戏中心识别玩家,我们需要知道他们是否经过身份验证,或者他们是否更改了身份验证等.我们有一个标题屏幕显示"正在初始化游戏中心...",直到认证调用返回,并且只有一次我们知道他们被认证为谁(如果有人)我们进入游戏.

但是,在非常少的时间内(实际上,我自己无法重现它),永远不会调用身份验证处理程序.几分钟后等待.游戏中心欢迎横幅也从不显示,因此不仅仅是我们的处理程序从未被调用过,但似乎确实没有身份验证状态.

到目前为止,我们实施了30秒的超时,如果我们没有从Game Center听到任何消息,我们认为身份验证状态没有改变,我们使用您保存的数据.那30秒的超时并不理想,所以我想知道当GC没有响应时是否有任何押韵或理由.

以下是从我们的App Delegate application: didFinishLaunchingWithOptions:方法调用的代码:

PlayerModel *playerModel = [PlayerModel sharedPlayerModel];
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)])
{
    localPlayer.authenticateHandler = ^(UIViewController *gkViewController, NSError *error)
    {
        if (localPlayer.authenticated)
        {
            [playerModel loadFromGameCenter];
            playerModel.hasGCStatus = TRUE;
            [playerModel sync];
        }
        else if (gkViewController)
        {
            [viewController presentViewController:gkViewController animated:TRUE completion:nil];
        }
        else
        {
            NSLog(@"Could not authenticate with Game Center");
            [playerModel unloadFromGameCenter];
            playerModel.hasGCStatus = TRUE;
            [playerModel sync];
        }
    };
}
else
{
    [localPlayer authenticateWithCompletionHandler:^(NSError *error) {
        if (localPlayer.authenticated)
        {
            [playerModel loadFromGameCenter]; …
Run Code Online (Sandbox Code Playgroud)

authentication timeout gamekit ios game-center

5
推荐指数
1
解决办法
2133
查看次数

您如何与开发人员团队一起管理Ruby on Rails迁移?

我们有一个开发人员团队,他们每个人都将使用Rails工具为我们的系统开发数据库迁移.迁移似乎最初是管理数据库模式更改的一种很好的方法,但是随着我们的继续,以分布式方式管理更改变得更加困难.如果我们每个人都自己开发迁移,我们如何协调发生的问题呢?

要具体说明问题,请考虑以下方案时间表:

  1. 开发人员A创建一个新的迁移文件,时间戳为上午9:00
  2. 开发人员B创建另一个新的迁移文件,时间戳为上午10:00
  3. 开发人员B检查日期上午10:00(上午11:00)的迁移
  4. 开发人员A检查上午9:00(上午11:30)的迁移

这里可能会出现许多问题,特别是如果两个迁移文件的更改发生冲突,但最基本的问题是有些人在上午9:00迁移时已经运行了上午10:00的迁移.与迁移相关联的时间戳当然是在创建文件时,而不是在签入时,这会弄乱Rails迁移器.

这是一个可修复的问题,但解决方案可能有很多不同的选择.解决这个问题的最佳方式(或至少是一种好方法)是什么?

migration version-control ruby-on-rails

3
推荐指数
1
解决办法
1037
查看次数