首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)

属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的『按钮点击』,谁也不能确定点击之后将发生什么事,是连接数据库呢还是弹出警告框,在不同的场景下,『按钮点击』 的行为往往呈现不一致...在战团中点击头像,则显示该成员的具体信息 在队伍里点击头像,则进入换人界面 在战斗时点击头像,则显示它配置的战术 你看,同样一个SubView,在不同的场景下它的行为往往是不一致的。...但仔细想想,这是最好的实践吗?...OnClick(); }); eventTrigger.triggers.Add(pointClickEntry); } private void OnClick() { if (BindingContext.OnClick...= null) { BindingContext.OnClick(); } } 脑海里梳理一下请求的流程:FaceBoxView.PointClick->FaceBoxViewModel.OnClick

67870

字节跳动最爱考的前端面试题:JavaScript 基础

,"DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。...冒泡'); }, false); parEle.addEventListener('click', function () { alert('父级 捕获'); }, true); sonEle.addEventListener...alert('子级捕获'); }, true); 当容器元素及嵌套元素,即在捕获阶段又在冒泡阶段调用事件处理程序时:事件按DOM事件流的顺序执行事件处理程序: 父级捕获...子级冒泡 子级捕获 父级冒泡 且当事件处于目标阶段时,事件调用顺序决定于绑定事件的书写顺序,按上面的例子为,先调用冒泡阶段的事件处理程序,再调用捕获阶段的事件处理程序。...闭包产生的本质 当前环境中存在指向父级作用域的引用 什么是闭包 闭包是一种特殊的对象,它由两部分组成:执行上下文(代号 A),以及在该执行上下文中创建的函数 (代号 B),当 B 执行时,如果访问了 A

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    每日面试题推送及讲解-20190415

    今日面试题 今天主要分享一些关于Java异常的常见面试问题,我们都应该明白使用异常要恰当合适,不可过分依赖异常,因为构造异常对象是比较耗时的。 一个线程运行时发生异常会怎样? 异常能代替简单的测试吗?...为什么 构造异常对象为什么会耗时 异常可以不生成栈追踪信息吗?...第二题很明细答案是不能,通常来说简单的业务测试,我们更应该使用判断的形式去处理,比如说某一行代码可能会存在空指针的情况,这个时候我们应该去判断对象是否为Null,而不应该依赖try-catch去捕获处理...第三题需要我们对Java异常结构有一定认识,当我们构造一个异常对象的时候会调用父类Throwable的fillInStackTrace()方法去生成栈追踪信息,这个方法以独占锁的形式去操作,所以比较耗时...但是我们需要知道,在一般的业务和应用中,只要异出现不是特别频繁,实际运行速度慢并不会有很明显的表现,因为运行速度往往都纳秒级的速度,此外Java对于锁也有一定的优化。

    28370

    Kotlin协程上下文和异常处理

    由于传入协程构建器的参数优先级更高,所以job的调度器被覆盖,是Dispatchers.IO而不是父类的Dispatchers.Main 异常 异常的传播 协程构建器有2种传播形式: 自动传播异常(launch...例如通过调用await或receive 非根协程产生的异常总是被传播 异常传播的特性 当一个协程由于一个异常而运行失败时,它会传播这个异常并传递给它的父级。...接下来父级会进行下面几步操作: 取消它自己的子级协程 取消它自己 将异常传播并传递给它的父级 SupervisorJob和SupervisorScope 使用SupervisorJob时,一个子协程的运行失败不会影响其他的子协程...的CoroutineContext中或在一个根协程中(CoroutineScope或者supervisorScope的直接子协程)中 handler要安装在外部协程中,不能在内部协程中,否则捕获不到异常...,不过它不能对异常进行捕获。

    8810

    C#报错——(Winform) 在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级

    问题点描述:   我新建一个线程,并在这个线程中,把某个控件的父级去掉或者更改,导致报这个异常 网上的解析如下:   “Windows 窗体”使用单线程单元 (STA) 模型,因为“Windows 窗体...STA 模型意味着可以在任何线程上创建窗口,但窗口一旦创建后就不能切换线程,并且对它的所有函数调用都必须在其创建线程上发生。...如果您在控件中为大量占用资源的任务使用多线程,则用户界面可以在背景线程上执行一个大量占用资源的计算的同时保持可响应。 用人话描述为:控件是属于主线程(UI线程),不可以跨线程修改其父级。...this.Controls.Add(tb); } } 看起来感觉很绕,而且很麻烦,又要新建方法,又要新建委托 所以我把它简化如下:           //使用拉姆达表达式创建一个委托,委托里面修改控件的父级...,委托里面再修改控件的父级 new Thread(() => this.Invoke(delega1)).Start(); }

    3.5K41

    译文《最常见的10种Java异常问题》

    5、Java中经常使用的运行时异常 6、我们可以在同一个catch子句中捕获多个异常吗? 7、在 Java 中构造方法能抛出异常吗?...异常管理的最佳实践箴言 如果可以正确处理异常,则应将其捕获并处理,否则应将其抛出。 ? 为什么在try代码块中声明的变量不能在catch或者finally中被引用?...看下面这段代码,在try代码块中声明的 String s 就不能在catch中被引用, 这段代码在编译期是通不过的。...我们可以在同一个catch子句中捕获多个异常吗? 答案是当然可以,不过如果在同一个catch子句中捕获的这些异常都直接或间接继承自同一父类,那么就只能在catch子句中捕获父类了。...,多个异常使用 XOR符号(I)连接,异常的发生有可能是 A | B,但不能同时出现,相当于这些异常不能是间接或直接继承自同一个父类,因为如果AB都继承同一父类,那就不能 A|B 都写上,这也是继承原则

    68030

    自定义控件的代码如何与ControlTemplate交互

    但需要双向绑定的话,就是RelativeSource出场的时候了。 RelativeSource有几种模式,分别是: FindAncestor,引用数据绑定元素的父链中的上级。...() { base.OnApplyTemplate(); ContentPresenter = GetTemplateChild(ContentPresenterName...由于Template可能多次加载,或者不能正确获取TemplatePart,所以使用TemplatePart前应该先判断是否为空;如果要订阅TemplatePart的事件,应该先取消订阅。...注意:不要在Loaded事件中尝试调用GetTemplateChild,因为Loaded的时候OnApplyTemplate不一定已经被调用,而且Loaded更容易被多次触发。...请注意我在OnApplyTemplate()中使用了 UpdateVisualStates(false),这是因为这时候控件还没在UI上呈现,这时候使用动画毫无意义。

    2K20

    协程中的取消和异常 | 异常处理详解

    当一个协程由于一个异常而运行失败时,它会传播这个异常并传递给它的父级。接下来,父级会进行下面几步操作: 取消它自己的子级; 取消它自己; 将异常传播并传递给它的父级。...SupervisorJob 不会取消它和它自己的子级,也不会传播异常并传递给它的父级,它会让子协程自己处理异常。...小测验: 谁是我的父级? 给您下面一段代码,您能指出 Child 1 是用哪种 Job 作为父级的吗?...将 SupervisorJob 作为参数传入一个协程的 Builder 不能带来您想要的效果。...内部协程会在异常出现时传播异常并传递给它的父级,由于父级并不知道 handler 的存在,异常就没有被抛出。 优雅地处理程序中的异常是提供良好用户体验的关键,在事情不如预期般发展时尤其如此。

    1.1K20

    《Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析

    - 选项与声明:用来定制词法分析器,包括类名、父类、权限修饰符等等,以%开头作为标记 - 词法规则:包括一组正则表达式和动作行为,也就是当正则表达式匹配成功后要执行的代码。...getElementType(); //节点文本 String getText(); //父节点 ASTNode getTreeParent(); //第一孩子节点 ASTNode getFirstChildNode...但是却会出现编译失败的情况,因为a、b、c类型各不相同且不能相互转换,不能进行运算操作。...: BindingContext): IrModuleFragment { val context = createGeneratorContext(moduleDescriptor, bindingContext...: BindingContext) = GeneratorContext(configuration, moduleDescriptor, bindingContext) fun

    1.7K20

    深入理解事件

    这就是上面我们说的,在目标对象(outC)上绑定的函数是采用捕获,还是采用冒泡,都没有什么关系,因为冒泡和捕获只是对父元素上的函数执行顺序有影响,对自己没有什么影响。...阻止事件冒泡和捕获 默认情况下,多个事件处理函数会按照DOM事件流模型中的顺序执行。如果子元素上发生某个事件,不需要执行父元素上注册的事件处理函数,那么我们可以停止捕获和冒泡,避免没有意义的函数调用。...如果用事件委托,那么我们就可以只对它的父级(如果只有一个父级)这一个对象进行操作,这样我们就需要一个内存空间就够了,自然性能就会更好。...ul>div,有这样一个机制,那么我们给最外面的div加点击事件,那么里面的ul,li,a做点击事件的时候,都会冒泡到最外层的div上,所以都会触发,这就是事件委托,委托它们父级代为执行事件。...我们可以发现,当用事件委托的时候,根本就不需要去遍历元素的子节点,只需要给父级元素添加事件就好了。这样可以大大的减少dom操作,这才是事件委托的精髓所在。

    84140

    OEA 中 WPF 树型表格整体重构

    OEA 的界面层十分依赖当前的 TreeGrid 控件的各项功能,特别是树型实体的展现。但是,在 WPF 环境下,一直没有找到比较好用的 TreeGrid。...但是,随着框架的应用场景越来越多、使用越来越频繁,它暴露出来的问题也就更多了。许多新的功能也不能支持,这个在前面已经列举了许多。    ...关于 OnApplyTemplate 与 Measure 的关系。    ...ApplyTemplate 是应用模板的意思,所以我们一般在 OnApplyTemplate 中查找应用模板后的指定的可视元素。那么,可以写在别的地方吗?    ...OnApplyTemplate 只会在 ApplyTemplate 方法第一次执行时被调用。我们经常会重写控件的这个方法,在其中查找指定的可视树元素。

    1.9K60
    领券