在Ember 1.13中渲染控制器操作

时间:2015-09-28 02:00:13

标签: javascript ember.js

首先,对Ember来说非常新,尤其是对控制器角色的改变。

在我的ember-cli 1.13.8应用程序中,我有一个控制器操作,可以找到通过用户搜索过滤的项目。问题是此搜索的结果永远不会在模板上呈现。

控制器:

import Ember from 'ember';

export default Ember.Controller.extend({

 actions: {
   query: '',
   searchQuestions: function() {
     var query = this.get('query');
     return this.get('model').filter(function(item) {
       return item.get('title').indexOf(query) !== -1;
     });
   }
 }
});

模板:

{{#each searchQuestions as |item|}}
  <p>{{item}}</p>
{{/each}}

我的理解是searchQuestions应该可用于模板。该操作被正确调用,并将运行从路由返回的模型。我已经登录了该方法,它将间歇性地打印出-1或0,以便找到匹配项。它只是不会在模板中更新。

我已经向导游咨询了http://guides.emberjs.com/v2.0.0/controllers/,并尝试使用基于此问题的{{outlet}} Ember route not displaying template content

如果您甚至可以推荐一篇好文章来概念性地理解Ember应用程序的流程,我将非常感激。

修改 固定错字

我修改了控制器,将输出添加为根对象的属性,但仍然没有渲染。

import Ember from 'ember';

export default Ember.Controller.extend({
searchQuestions: "",

actions: {
  query: '',
  searchQuestions: function() {
    var query = this.get('query');
    return this.get('model').filter(function(item) {
      console.log(item.get('title').indexOf(query) !== -1)
      return item.get('title').indexOf(query) !== -1;
    });
    this.set('searchQuestions', searchQuestions);
  }
}
});

1 个答案:

答案 0 :(得分:1)

尝试将属性添加到根对象,因为它们不是动作。然后您可以在初始化时设置数据:

export default Ember.Controller.extend({
  query: '',
  setup: Ember.on('init', function() {
    var query = this.get('query');
    var searchQuestions = this.get('model').filter(function(item) {
      return item.get('title').indexOf(filter) !== -1;
    });
    this.set('searchQuestions', searchQuestions);
  })
});