在Ember.js控制器中将函数的结果传递回自身

时间:2014-04-21 22:32:09

标签: javascript ember.js lodash

我有一个功能,使用lodash和vanilla javascript做我想做的事情。我传递一个值,它检查该值是否已经映射,然后检查该值是否具有特定的子属性。如果是,则通过相同的函数传递子属性。

我试图在ember应用程序中做同样的事情,但该函数是控制器中的属性。当我尝试引用函数名时,我收到一个错误:“未捕获的ReferenceError:collectHeaders不是函数”。如何将“collectHeaders(child)”的结果传递回函数?

只是lodash& javascript工作原理:

function collectHeaders(parent) {    
  var firstChild = parent.children ? parent.children[0] : {};

  if (firstChild.section_type && firstChild.section_value) {
    _.forEach(parent.children, function(child) {
      collectHeaders(child)
    });
  } else if (parent.children) {
    // more code
  }
}

带有lodash的Ember.app控制器:

var mapping = {};

var CompareController = Ember.ObjectController.extend({

collectHeaders: function(parent) {
    var firstChild = parent.children ? parent.children[0] : {};

    if (firstChild.section_type && firstChild.section_value) {
      _.forEach(parent.children, function(child) {
        collectHeaders(child);
      });
    } else if (parent.children) {
      // more code
    }
  },
});

export default CompareController;

1 个答案:

答案 0 :(得分:0)

您的代码超出了范围,您之前的功能是全局的

collectHeaders: function(parent) {
    var self = this;
    var firstChild = parent.children ? parent.children[0] : {};

    if (firstChild.section_type && firstChild.section_value) {
      _.forEach(parent.children, function(child) {
        self.collectHeaders(child);
      });
    } else if (parent.children) {
      // more code
    }
  },
});