TypeError:router.get(...)。loadMoreDetails不是一个函数

时间:2013-02-15 15:47:23

标签: ember.js

我正在关注trek.github.com的一个介绍教程,并在运行时遇到了标题中的错误。 Paste is available,错误发生在第119行。与此同时,我想用这个帖子来解决一些EmberJS新手问题:

  1. Ember.ObjectController和Ember.Object之间有什么区别?
  2. 在第70行,URL后面出现.fmt(this.get('login'))。这是做什么的?
  3. 我注意到Ember可以使用'/:VAR'表示法处理变量URL名称。只是想知道,如果出现多个变量URL名称,如果有重复,EmberJS如何管理它们?使用可变URL名称是一种好习惯吗?
  4. 示例带有序列化和反序列化功能(来自第107行)以获取登录名。但我没有看到他们在任何地方被召唤。
  5. 感谢您的耐心等待, 安吉拉

1 个答案:

答案 0 :(得分:0)

我担心你在这里使用旧版的Ember,Angela。你正在使用pre 2,而最新的版本是4之前。我建议你使用pre 4,因为很多都已经改变了。例如,看看你的#119行,我可以直接告诉你,在前4版中没有connectOutlets方法。

尽管如此,我认为你的问题是,粗略地看一眼,你试图在控制器的内容上调用loadMoreDetails,而不是控制器本身。尝试:router.get('oneContributorController').loadMoreDetails();

此外,在第4版之前不再访问路由器。我认为更新是至关重要的。

<强>问题

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

  2. 你的背景是什么? Ruby还是PHP?不管怎样,fmt方法就像PHP的sprintf和Rails'%运算符("Tasks: %d" % @tasksCount)。 %@用于指定get('login);的值在字符串中的显示位置。

  3. Ember未指定URL本身中的变量名称。不是默认,任何方式。这是你的路由器(你使用的是路由器v1,而它是前4中的路由器v2)告诉Ember URL的哪一部分映射到哪个属性。这样就没有重复,因为每个变量在URL中都有自己唯一的空间。

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

  5. P.S:我认为你会发现my post from yesterday内容非常丰富。