0

我正在关注来自 trek.github.com 的介绍教程,但在运行它时遇到了标题中的错误。粘贴可用,第 119 行发生错误。同时,我想用这个线程来解决一些 EmberJS 新手问题:

  1. Ember.ObjectController 和 Ember.Object 有什么区别?
  2. 在第 70 行,在 URL 之后出现了 .fmt(this.get('login'))。这是做什么的?
  3. 我注意到 Ember 可以使用 '/:VAR' 符号处理变量 URL 名称。只是想知道,如果出现多个变量 URL 名称,如果有重复,EmberJS 如何管理它们?使用可变 URL 名称是一种好习惯吗?
  4. 该示例带有序列化和反序列化函数(从第 107 行开始)来获取登录名。但我没有看到他们在任何地方被调用。

谢谢你的耐心,安吉拉

4

1 回答 1

0

恐怕你在这里使用的是旧版本的 Ember,安吉拉。您使用的是 pre 2,而最新版本是 pre 4。我建议您使用 pre 4,因为发生了很多变化。例如,看看你的第 119 行,我可以直接告诉你connectOutletspre 4 中没有任何方法了。

综上所述,我认为您的问题是,粗略地看一下,您正试图调用loadMoreDetails控制器的内容,而不是控制器本身。尝试:router.get('oneContributorController').loadMoreDetails();

此外,在pre 4中不再可以访问路由器。我认为更新至关重要。

问题

  1. Ember.Object表示单个对象,而Ember.ObjectController更多的是关于存储许多Ember.Objects 的集合。您应该使用Ember.ArrayController(类似对象的数组)、Ember.ObjectController(许多不同相关对象的容器)或Ember.Controller(通用用法),具体取决于您的用例。

  2. 你的背景是什么?红宝石还是 PHP?无论哪种方式,该fmt方法都类似于 PHPsprintf和 Rails 的%运算符 ( "Tasks: %d" % @tasksCount)。是指定的%@get('login);将出现在字符串中的什么位置。

  3. Ember 没有在 URL 本身中指定变量的名称。无论如何,不​​是默认情况下。是您的路由器(您使用的是路由器 v1,而它是 pre 4 中的路由器 v2)告诉 Ember URL 的哪个部分映射到哪个属性。这样就没有重复项,因为每个变量在 URL 中都有自己独特的空间。

  4. 这些来自您正在使用的旧 Ember。在新版本中,它们更加直观。为了告诉控制器它应该代表哪个模型,您model在路由器中有一个方法可以返回正确的模型。在您使用的版本中,它们告诉 Ember 如何从 URL 参数创建对象(deserialize- 为什么有deserialized?),反之亦然,从您传入的对象中获取 URL 的属性(serialize)。

PS:我想你会发现我昨天的帖子内容丰富。

于 2013-02-15T16:39:30.397 回答