b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

视图层的作用_cad视图层设置_视图和表的区别(5)

电脑杂谈  发布时间:2016-12-09 15:07:58  来源:网络整理

截止目前,在本指南中所见的,应用中使用的主要视图都是基于模板的。当使用模板时,不需要通过编程来创建视图层级,因为模板会创建它。

当渲染时,视图模板可以追加视图到它的子视图数组。在内部,模板的{{view}}助手将调用视图的appendChild方法。

调用appendChild完成如下两件事情:

将子视图添加到childViews数组。

立即渲染子视图,并将其添加到父视图的渲染缓冲中去。

在一个视图不在渲染中这个状态之后,不能调用其appendChild方法。一个模板渲染“混合的内容”(包括视图和纯文本),因此父视图在完成了渲染过程之后不知道在什么地方添加新的子视图。

在上例中,假定尝试在父视图的childViews数组中添加一个新的视图。是否应该将其添加到App.MyView的</div>之后呢?或者是添加到整个视图的</div>之后呢?这里通常都无法得到一个正确的答案。

由于存在不明确的地方,所以创建视图层级的唯一方法便是使用模板的{{view}}助手,它将永远可以将视图插入到与任何纯文本关联的正确位置。

虽然模板可以处理大部分情形,但是偶尔也会需要直接通过编程来控制视图的子元素。在这种情况下,可以使用Ember.ContainerView,它显式的暴露了一个公有API来完成这项任务。

容器视图不包含纯文本,完全由其子视图构成(子视图可以基于模板)。

ContainerView暴露了两个公有API来改变其内容:

一个可写的childViews数组,可以在其中插入Ember.View的实例。

一个currentView属性,当其被设置时,将新的值添加到子视图数组中。如果currentView之前有值,那么这个值将被从childViews数组中移除。

下面是一个使用childViewsAPI来创建视图的例子。有一个假设的DescriptionView开始,并可以通过调用addButton方法在任何时刻添加一个按钮:

如上例中所述,使用了两个视图来对ContainerView进行初始化,而且还可以在运行期添加附加的视图。按照惯例,与通过重写init方法不同,还有另外一种更为简便的初始化方法:

如上所述,当使用这种便捷的方法时,childViews通过一个字符串数组来指定。在初始化的时候,每一个字符串都用作查找视图实例或者类的关键字。对应的视图如果需要的话,会自动初始化,并被添加到childViews数组中去。

标准的Handlebars模板巨涌上下文的概念,即表达式将从哪个对象中查找。

一些如同{{#with}}一样的助手,可以改变其块内的上下文。其他的如同{{#if}}之类的,则保留了上下文,它们被称为“保留上下文助手”。

当Ember应用中的Handlebars模板使用了表达式时({{#if foo.bar}}),Ember在当前的上下文中自动针对路径设置一个观察器。

如果被路径引用的对象发生改变,那么Ember将自动使用适当的上下文重新渲染该块。在一个保留上下文的助手情况下,Ember在重新渲染块的时候使用初始的上下文。否则,Ember将使用路径对应的新值作为上下文。

在上述的模板中,当isAuthenticated属性由假变真时,Ember将使用初始的外部作用域作为它的上下文来渲染块。

而{{#with}}助手则将其块的上下文变为当前控制器的user属性。当user属性改变时,Ember使用controller.user的新值作为其上下文来重新渲染该块。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22614-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 陈瑞
      陈瑞

      那日本完全不能抵挡了

    热点图片
    拼命载入中...