Ember.js 余烬:从控制器在模板中设置变量

Ember.js 余烬:从控制器在模板中设置变量,ember.js,Ember.js,我的模板中有一个名为someString的变量,我想在控制器中设置它。我收到一个未捕获错误:断言失败:TypeError:无法读取未定义的属性“set” 我如何让控制器知道模板变量(如果这就是这个问题的解决方案) 我的模板如下所示: {{{#模态对话框action=“close”title=“New Run”} ... {{input value=emailcomparisonruid class=“表单控制”占位符=“比较运行ID(可选)”} {{someString}} ... {{/m

我的模板中有一个名为someString的变量,我想在控制器中设置它。我收到一个未捕获错误:断言失败:TypeError:无法读取未定义的属性“set”

我如何让控制器知道模板变量(如果这就是这个问题的解决方案)

我的模板如下所示:

{{{#模态对话框action=“close”title=“New Run”}
...
{{input value=emailcomparisonruid class=“表单控制”占位符=“比较运行ID(可选)”}
{{someString}}

...
{{/modal dialog}
您正在观察者内部创建函数,这些函数使用错误的上下文调用。更新它们以绑定其函数的上下文:

var onIdFound = function(id) {
  console.log('FOUND');
  this.set('someString', 'FOUND');
}.bind(this);

var onIdNotFound = function(reason) {
  console.log('Not Found');
  this.set('someString', 'NOT FOUND')
}.bind(this);

在当今时代,arrow函数可能是一个更好的解决方案。基于他使用的
ObjectController
,他使用的是比Ember cli更早的旧版本的Ember,因此不附带Babel。因此,我选择了安全的答案(但是是的,在我自己的项目中,我会选择胖箭头作为答案)。您可以通过在
this.set()
行上放置断点并检查
this
来调试它。当您看到它等于
窗口
,这将是一个很好的线索。顺便说一句,祝贺您为found和not found开发了函数,这是一种编写代码的干净方法,更多的人应该遵循。