小编mis*_*180的帖子

当从未直接更新时,具有可变实时数据支持属性的观察到的实时数据如何知道触发观察者?

我正在通过 udacity 关注 google android 项目“猜猜它”,他们介绍了 livedata 和 mutablelivedata。我们已经创建了一个与可变实时数据对象等效的实时数据,并为可变实时数据实例的实时数据创建了 get() 支持属性。我们使用 mutablelivedata 实例对 viewModel 中的数据进行所有更改。我们的 UI 片段在 viewModel 的 livedata 对象上设置观察者,而不是可变的 livedata 对象。

尽管观察者位于 livedata 实例而不是 mutablelivedata 实例上,但当更新 mutablelivedata 对象时,会触发 livedata 观察者代码。我喜欢它的工作原理,但我不太明白它是如何工作的。谁能向我解释一下吗?

在视图模型中

val _word = MutableLiveData<String>()
val word : LiveData<String>
        get() = _word
Run Code Online (Sandbox Code Playgroud)

在 ViewModel 中编辑

private fun nextWord() {
    //Select and remove a word from the list
    if (wordList.isEmpty()) {
        //gameFinished()
    } else {
        _word.value = wordList.removeAt(0)
    }
}
Run Code Online (Sandbox Code Playgroud)

在 UI 片段中

viewModel.word.observe(this, Observer{newWord ->
            binding.wordText.text = newWord …
Run Code Online (Sandbox Code Playgroud)

android android-livedata mutablelivedata

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

在ASP.net MVC中,可以在完成控制器操作之前处理cshtml逻辑吗?

我有一个控制器,该控制器的控制器操作中发生数据库逻辑。另外,我知道这可能并不理想,但我的观点有一定逻辑。这会执行一些sql查询,并且可能这些查询可能会更新记录。我有一个在控制器操作开始时打开的事务。为了解决此问题,我将其保留到我的操作的View()调用之后,希望在必须提交事务之前执行视图逻辑。但是,这似乎不起作用,因为它似乎仅在控制器的动作完全完成后才处理视图逻辑。

ViewBag.Message = message;
                ViewBag.Test = test;

                var result = View();

                LegacyDataManager.Commit();
                Data.Commit();

                return result;
            }
            finally
            {
                LegacyDataManager.Stop();
                Data.CloseInstance();
            }
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是,我推迟执行事务的关闭,直到视图逻辑结束为止,但这似乎比我目前尝试的还要错误。

我的最终目标是在关闭交易之前发生所有必要的逻辑。

谢谢。

c# asp.net asp.net-mvc

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