0

我是 Ember.js 的初学者,我想我的问题有一个非常简单的答案,所以请多多包涵。

我尝试在控制器对应模板中的 Ember.TextField 中的控制器属性和“值”属性之间建立双向绑定。我已经成功地为控制器中的属性赋予了特定的初始值,该初始值反映在 Ember.TexField 的 value 属性中,例如:

js代码:

App = Ember.Application.create();
App.IndexController = Ember.ObjectController.extend({
              aProperty: 1 });

模板:

<script type:"text/x-handlebars" data-template-name="index">
{{view Ember.TextField valueBinding="aProperty"}}
</script>

现在文本字段显示值(“1”),一切都很好。如果我现在尝试在文本字段中输入一个新值,例如“2”,并尝试使用 App.IndexController.get("aProperty") 在浏览器控制台中检查“aProperty”的值,它不起作用并抛出一个错误并说“get()”没有定义。如何从 IndexController 中检索“aProperty”的值并检查它是否已将值更新为我在 Ember.TextField 中输入的值?

非常感谢任何提示、评论和建议!

谢谢!

编辑: 下面的两个答案都完成了我想做的事情。我也让它工作了:我在App.IndexController扩展它之后创建了一个具体的实例,如下所示:

App.IndexController = Ember.ObjectController.extend({
              aProperty: 1 });
App.indexController = App.IndexController.create();

aProperty并且可以使用 .从控制台检索 的值App.cueController.get('aProperty')。但是,Ember 文档中的所有示例都从未创建控制器的具体实例,所以我想知道这是否有必要,更不用说 Ember 对现实世界应用程序的鼓励了。有任何想法吗?

4

2 回答 2

2

您应该在调试控制台中像这样查找控制器:

App.__container__.lookup('controller:index').get('aProperty')

http://jsbin.com/uxojek/9/edit

于 2013-06-01T15:10:11.927 回答
0

由于__container__仅用于调试目的,如果您想在不使用私有的情况下记录属性更改,__container__您可以在控制器属性上设置一个观察者以观察更改并将新值记录到调试器控制台。

例子:

App = Ember.Application.create({});

App.IndexController = Ember.ObjectController.extend({
  aProperty: 1,
  aPropertyDidChange: function() {
    console.log(this.get('aProperty'));
  }.observes('aProperty')
});

工作jsbin

希望能帮助到你

于 2013-06-01T15:14:25.420 回答