无法让Ember.js从控制器中的对象渲染属性

时间:2012-07-17 00:22:35

标签: ember.js javascript-framework

总Noob问题在这里。我为简单而道歉,我在这里浏览了数百个Ember标记的帖子,寻找答案。但是对于任何人来说,它似乎太过于原始,以至于不得不烦恼......

我是从头开始和Ember一起开始的。我做了Andy Matthews的EmberTweets教程,该教程运行良好。我正在尝试使用它作为我的第一个Ember应用程序的基础,这非常简单;但我坚持最基本的步骤。我似乎有一个正常运行的控制器,我似乎成功地添加了新的对象。但我无法为我的生活获取我的视图来渲染这些对象的属性。基本视图呈现出来,但不是来自控制器的数据,我只是想用简单的#each来访问它。我在任何浏览器控制台中都无错误

小提琴是here

我尝试在我的示例中以三种不同的方式向控制器添加对象,看看是否有帮助。我可以通过检查内容数组,或者像FilterMenus.MenusController.content.objectAt(2).get('menu_name')这样,从控制台成功访问对象的属性。显然,数据是正确的。

但是当我尝试渲染任何属性时,我的模板中仍然没有显示任何内容,例如:{{menu_name}}。我做错了什么,拜托?

3 个答案:

答案 0 :(得分:6)

如其他答案所述,您必须将您的应用声明为全局变量(省略var)。

除此之外,您没有在this._super()的{​​{1}}方法中调用FilterMenus.menusController。这是正确设置init所必需的,因此修改Ember.ArrayController将起作用。

除了这两个问题,您的代码看起来还不错。这是一个工作小提琴:http://jsfiddle.net/pangratz666/HPkHt/

答案 1 :(得分:2)

似乎Ember对您的代码的一个大问题是您的Application被定义为var,因此无法从模板访问它。删除var关键字有帮助。

出于某种原因,这还不够,我不得不添加一个

this.set('content', []);

作为init函数的第一行,让它工作。我以前从来没有这样做过,所以我不确定是不是这样做了。如果有人对此有所了解,我会热衷于听到它。

答案 2 :(得分:1)

尝试以下方法:

  1. 从FilterMenus声明中删除“var”:

    FilterMenus = Em.Application.create();
    
  2. menusController.addMenu的实施更改为:

    addMenu: function(menu) {
        this.content.push(menu);
    },
    
  3. 这让我在“选择国家”和解释性段落之后显示了两个菜单名称:

    countries
    countries2
    

    Ember似乎不知道this.pushObject(menu);是什么。但是,直接推送到控制器的内容数组将始终有效。