小编Mat*_*son的帖子

奇怪的骨干findWhere()行为

我正在使用Backbone和RequireJS构建一个应用程序,我对Collection.findWhere()Backbone功能的行为感到非常困惑.

代码是这样的:

var myId = 1;
var subList = parentList.findWhere({id: myId});
Run Code Online (Sandbox Code Playgroud)

subList显示为undefined.

代码是这样的:

var subList = parentList.findWhere({id: 1});
Run Code Online (Sandbox Code Playgroud)

subList包含正确的模型.

有谁知道这可能导致什么?

javascript json backbone.js

5
推荐指数
0
解决办法
3163
查看次数

使用可选文本处理ClickableSpan的点击需要双击

我有一个TextView每个词都是一个ClickableSpan.单击时,单词变为粗体,单词的字典定义显示在另一个TextView中.应用程序正常工作,直到我在TextView中选择文本.当文本可选时,单击会显示定义,但双击时该单词仅为粗体.双击或长按选择文本(但长按不会使单词变为粗体).

我的猜测是,问题与在动作处理过程中更新绘制状态有关,但我无法找到修复.我试过设置TextView focusable="false"但没有改变.相关代码如下.

curSpan = new WordSpan(index) {
    @Override
    public void onClick(View view) {
        handleWordClick(index,this); // handles code to display definition
        setMarking(true);
        view.invalidate();
        tvText.invalidate();
    }
};

spannableStringBuilder.setSpan(curSpan, totalLength, totalLength + strWord, Spanned.SPAN_COMPOSING);
Run Code Online (Sandbox Code Playgroud)

和WordSpan定义:

class WordSpan extends ClickableSpan
    {
        int id;
        private boolean marking = false;

        public WordSpan(int id) {
            this.id = id;
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(Color.BLACK);
            ds.setUnderlineText(false);
            if (marking) {
                ds.setTypeface(Typeface.create(myFont,Typeface.BOLD));
            } …
Run Code Online (Sandbox Code Playgroud)

android clickable focusable clickablespan

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

Kotlin 单例:对象与具有私有构造函数的类

Google 的向日葵示例应用程序使用带有伴随对象的私有类来实现其存储库的单例模式,而不是简单地将存储库实现为(本质上单例)对象。

这是我第一次看到单例在 Kotlin 中以这种方式实现,而不是作为对象实现。在什么情况下应该使用这个私有构造函数实现而不是更常见的对象实现?

class GardenPlantingRepository private constructor(
  private val gardenPlantingDao: GardenPlantingDao
) {
  suspend fun createGardenPlanting(plantId: String) {
    withContext(IO) {
      val gardenPlanting = GardenPlanting(plantId)
      gardenPlantingDao.insertGardenPlanting(gardenPlanting)
    }
  }

  suspend fun removeGardenPlanting(gardenPlanting: GardenPlanting) {
    withContext(IO) {
      gardenPlantingDao.deleteGardenPlanting(gardenPlanting)
    }
  }

  fun getGardenPlantingForPlant(plantId: String) =

    gardenPlantingDao.getGardenPlantingForPlant(plantId)

  fun getGardenPlantings() = gardenPlantingDao.getGardenPlantings()

  fun getPlantAndGardenPlantings() = gardenPlantingDao.getPlantAndGardenPlantings()

  companion object {
    // For Singleton instantiation
    @Volatile private var instance: GardenPlantingRepository? = null

    fun getInstance(gardenPlantingDao: GardenPlantingDao) =
      instance ?: synchronized(this) {
        instance ?: GardenPlantingRepository(gardenPlantingDao).also { instance …
Run Code Online (Sandbox Code Playgroud)

singleton kotlin

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

Firebase事务() - 添加到列表时的功能类似?

这是一个相当复杂的问题,但我会尽可能简单而简洁地解释它......

我正在使用Firebase构建一个基于Web的多用户游戏.我保留了游戏中每一轮的清单.在一轮结束时,每个用户都会看到一个"开始"按钮,当他们准备开始下一轮时,他们会点击该按钮.当至少50%的用户点击"开始"时,该轮开始.

我有一个gameRef游戏的Firebase参考,一个roundListRef代表轮次列表的参考,以及一个roundRef代表当前轮次的参考.

我附加了一个child_added回调,roundListRef以便在添加新回合时,它成为每个人的当前回合:

roundListRef.on('child_added', function(childSnapshot, prevChildName) {
    roundRef = childSnapshot.ref();
});
Run Code Online (Sandbox Code Playgroud)

我可以跟踪newRoundVotesactivePlayers,并从那里很容易计算出50%.如果达到50%,则会添加新一轮,触发每个人的child_added事件,新一轮将从那里开始......

gameRef.child('newRoundVotes').on('value', function(snapshot) {
    var newRoundVotes = snapshot.val();

    gameRef.child('activePlayers').once('value', function(snapshot) {
        var activePlayers = snapshot.val();

        if (newDriveVotes / activePlayers >= 0.5)
            addNewRound();
    });
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何确保只添加一轮新轮次,并且每个人都在同一轮?

例如,假设有10名球员,4名已经投票开始下一轮比赛.如果第6名玩家child_added在第5名玩家触发事件之前投票,那么第6名玩家也将加入一轮.

问题类似于.set()vs .transaction(),但不完全相同(根据我的理解).

有没有人有办法解决吗?

firebase

4
推荐指数
1
解决办法
886
查看次数

Java - 数组中的Regex反向引用

有没有办法使用正则表达式拆分Java String并返回反向引用数组?

举个简单的例子,我想从简单的电子邮件地址(仅限字母)中提取用户名和提供商.

String pattern = "([a-z]+)@([a-z]+)\\.([a-z]{3})";
String email = "user@email.com";

String[] backrefs = backrefs(email,pattern);

System.out.println(backrefs[0]);
System.out.println(backrefs[1]);
System.out.println(backrefs[2]);
Run Code Online (Sandbox Code Playgroud)

这应该输出

user
email
com
Run Code Online (Sandbox Code Playgroud)

java regex backreference

2
推荐指数
1
解决办法
807
查看次数

Firebase child_add

我的应用现在可以使用了,但是我不确定为什么可以使用...

我有一些类似的代码:

var itemRef;

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot;
});
Run Code Online (Sandbox Code Playgroud)

问题是,当我以后尝试使用itemRef它时,它不起作用。我花了几个小时才意识到该引用无效,因为itemRef.name()返回了正确的引用名称。

在搜索API时,我遇到了该.ref()函数。API声明.ref()返回“生成此DataSnapshot的位置的Firebase参考”。这使该功能听起来对我毫无意义,但我决定尝试一下:

var itemRef;

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot.ref();
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么.ref()我的参考全部完成后为什么仍能使我的参考起作用的原因是“生成此DataSnapshot的位置的Firebase参考”。??

javascript firebase

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