Ember.js准备发布RC2了


大新闻,Ember.js团队已经开始了发布RC2的相关工作。

今天看到@wycats在website上创建了一个rc2-release的分支,并且在一篇即将发布的文章中说已经开始了Ember.js RC2发布的的相关工作。这说明了什么呢?这说明了我们离1.0正式版的发布又近了一步。这实在是一个不得不让人为之兴奋的消息。

如RC1发布时所声明的一样,之后发布的版本只会做一些问题修正和增强性改变,不会进行破坏性变更。那么我们看看RC2会给我们带来些什么呢?

按命名空间查找控制器

在之前的版本中,我们只能从应用的主命名空间来查找控制器。在RC2中,我们可以从其他的命名空间来查找了。

1
{{render 'posts'}}

意味着使用App.PostsController来渲染posts模板。现在我们还可以使用其他命名空间下的控制器来进行渲染。例如:

1
{{render 'blog/posts'}}

这里会使用Blog.PostsController来渲染blog/posts模板。

用多模型进行渲染

在RC1中,使用{{render 'posts'}}表示利用App.PostsController的实例来渲染posts模板。这种方法总是使用同一个单例的控制器来渲染模板。

而在RC2中,可以使用一个特定的模型来渲染模板,例如{{render 'post' post}}。如果我们使用render渲染模板的时候指定了一个模型,那么Ember.js会每次创建一个新的App.PostController实例,而不是使用同一个。这样我们就可以在循环中使用{{render}}

1
2
3
{{#each post in posts}}
  {{render 'post' post}}
{{/each}}

打开ObjectController的模型

将一个ObjectController作为参数传递给actionlinkTo时,Ember.js现在支持将控制器的模型取出并传递给actionlinkTo。最为重要的是,这使得我们可以在不影响控制器和路由的操作处理函数的同时,为{{#each}}添加一个itemController

如果我们有一个这样的模板:

1
2
3
4
5
6
7
<!-- posts.handlebars -->

<ul>
{{#each controller itemController='postItem'}}
  <li><button {{action selectPost this}}>{{name}}</button></li>
{{/each}}
</ul>

那么我们的App.PostsController应该是这样的:

1
2
3
4
5
6
7
8
9
App.PostsController = Ember.ArrayController.extend({
  needs: 'currentPost',

  selectPost: function(post) {
    // `post` here is an `App.Post`, not an
    // `App.PostItemController`
    this.set('controllers.currentPost.model', post);
  }
});

这使得使用itemController减少了问题的出现。


博客评论基于Disqus