2

更新:忘了提到我在版本中使用 Ember1.0.0-rc2

鉴于我有以下(非常简单的)Ember.View对象:

App.AuthenticationLoginFormView = Ember.View.extend({
  tagName: 'form',
  classes: ['ajax-form']
}

Handlebars在这样的模板中使用:

{{#view App.AuthenticationLoginFormView  }}
  <div class="ajax-form__row">
      <label>
          Account:<br/>
        {{ view Ember.TextField valueBinding="controller.account" }}
      </label>
  </div>
  <div class="ajax-form__row">
      <label>
          Username:<br/>
        {{ view Ember.TextField valueBinding="controller.username" }}
      </label>
  </div>
  <div class="ajax-form__row">
      <label>
          Password:<br/>
        {{ view Ember.TextField type="password" valueBinding="controller.password" }}
      </label>
  </div>
  <div class="ajax-form__row">
      <a href="" class="ajax-form__reset-link" {{action "reset" }} >Reset</a>
      <button class="ajax-form__button" {{action "login" target="controller"}} >Login</button>
  </div>
{{/view }}

和一个Controller看起来像的整个事情:

App.AuthenticationLoginController = Ember.Controller.extend({
  account: null,
  username: null,
  password: null,

  login: function() {
    // if I call, for example, this.get('account') I get the correct value
  }
});

正如我在代码示例中所写,我login在表单提交时调用的函数中获得了“正确”值。但是如果我尝试中断transitionTo相应Route对象中的操作,控制器的所有值似乎都是null

App.AuthenticationLoginRoute = Ember.Route.extend({
  events: {
    reset: function(){
      console.log(this.controller.get('account'); // <-- prints 'null'!
      this.transitionTo('reset');
    }
  }
}); 

input即使没有action在控制器上执行,是否可以获得字段的值?如果是,我将如何实施?我是否需要为每个Ember.TextField在 a 上触发的侦听器keyEvent

4

1 回答 1

1

不,您不需要每个 Ember.TextField 上的侦听器,扩展它:扩展 Ember.TextField 并挂钩到更改事件:

App.MyTextField = Ember.TextField.extend({
    change: function() {
        console.log(this.get('value'));
    }
});

在您的模板中:

{{ view App.MyTextField type="password" valueBinding="controller.password" }}

现在,每次您在文本字段中输入内容时,您都应该看到控制台输出。

希望能帮助到你。

编辑:

App.AuthenticationLoginRoute = Ember.Route.extend({
  events: {
    reset: function(){
      console.log(this.controllerFor('authenticationLogin').get('password')); // <-- what does this print?
      this.transitionTo('reset');
    }
  }
});
于 2013-04-29T13:19:36.867 回答