在Ember中,this和this.controller有什么区别

sza*_*ske 5 javascript forms ember.js ember-data

我正在尝试构建一个简单的Ember应用程序,它从表单中收集信息.我正在使用本教程作为指南.在本教程中,它具有以下代码以从表单中获取信息:

export default Ember.Component.extend({
  ...
  actions: {
    saveRental1() {
      var params = {
        owner: this.get('owner'),
        city: this.get('city'),
        type: this.get('type'),
        image: this.get('image'),
        bedrooms: this.get('bedrooms'),
      };
      ...
      this.sendAction('saveRental2', params);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

这里有一些相关的表单代码:

      <div class="form-group">
        <label for="image">Image URL</label>
        {{input value=image id="image"}}
      </div>

      <button {{action 'saveRental1'}}>Save</button>
    </form>
Run Code Online (Sandbox Code Playgroud)

在我的解决方案中,我无法让它发挥作用.this.get('whatever')总是在我的代码中显示为'undefined'.经过一些调试后,我找到了一个解决方案,但这意味着我将代码更改this.get('city')this.controller.get('city')

有人可以解释我做错了什么或为什么?使用this.controller是"标准"吗?

Emb*_*eak 2

模板上下文将是控制器。默认情况下,路由钩子返回数据将在控制器属性model中设置。您可以通过 访问路由中的控制器。modelsetupControllerthis.controller

如果您在组件内部使用this,它将引用组件实例,在您的情况下,如果您在组件中获取了该属性,那么您可以使用组件中city访问它。this.get('city')