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

时间:2017-08-10 15:15:22

标签: javascript forms ember.js ember-data

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

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);
    }
  }
});

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

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

      <button {{action 'saveRental1'}}>Save</button>
    </form>

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

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

2 个答案:

答案 0 :(得分:2)

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

如果在组件中使用this,它将引用组件实例,在您的情况下,如果组件中有city属性,则可以使用this.get('city')访问它在组件中。

答案 1 :(得分:0)

他没有在那里更新教程。理想情况下,只有将值传递给组件时,才能以this.get('city')this.get('owner')进行访问。像下面的东西。

{{new-rental city=city owner=owner}}

除非您将值传递给组件,否则您无法以this.get('city')方式访问,而是可以this.controller.get('city')访问,这就是您的情况。如果您想直接访问它们,请尝试将值传递给组件。

相关问题