【问题标题】:Logic for when 'this' is valid from component to service当“this”从组件到服务有效时的逻辑
【发布时间】:2018-01-19 09:57:00
【问题描述】:

我很困惑。我有这个工作,但我不知道为什么。这是设置... 服务,被剥夺了......

export default Ember.Service.extend({
    editableCat: null,
    saveCatChanges() {
        var editCat = editableCat;
this.get('editstate').saveJournalChanges();
...

调用者,它是一个组件活动... 从 'ember' 导入 Ember;

export default Ember.Component.extend({
    editstate: Ember.inject.service('edit-state'),
    actions: {
        createCat() {
            WORKS this.get('editstate').saveCatChanges();
            FAILS Ember.get(this.get('editstate'), 'saveCatChanges')

        }
    }            
});

“FAILS”版本在访问服务时没有“this”的定义。真的吗?所以没有定义“saveCatChanges”,它例外。但是服务中的相同代码(使用 WORKS 变体调用)有一个“this”,一切都很好。

为什么?嗯?我追查到这件事的唯一原因是在尝试记录它时感到非常沮丧,所以,嗯,什么?

请帮助我理解。当我需要 foo.bar vs Ember.get(this, 'foo').bar vs Ember.get(this,Ember.get(this, 'foo'),'bar) 时,Ember 让我感到困惑,但这尤其出乎意料。

【问题讨论】:

    标签: ember.js


    【解决方案1】:
    WORKS this.get('editstate').saveCatChanges();
    

    这是可行的,因为您正在获取 editstate 对象并调用函数 saveCatChanges 函数。

    FAILS Ember.get(this.get('editstate'), 'saveCatChanges')
    

    它没有失败。它正在检索属性。但你没有调用它。

    Ember.get(this.get('editstate'), 'saveCatChanges')() 等价于this.get('editstate').saveCatChanges()

    你的座右铭是什么? Ember.get 用于从您在第一个参数中发送的对象中检索属性。在您的情况下,您正在尝试获得功能,这并不理想。您不需要使用Ember.get 来执行此操作。

    Ember.get 在后端使用this.get。两者都是一样的。 Ember.Object 有get/set 方法,普通普通对象没有get/set 方法,这种情况下我们可以使用Ember.get/Ember.set

    1. foo.bar -> 不要使用它。始终使用 get/set 方法。
    2. Ember.get(this, 'foo').bar -> 如果 foo 是 Ember 对象,则 this.get('foo').get('bar')Ember.ger(this,'foo.bar')
    3. Ember.get(this,Ember.get(this, 'foo'),'bar) -> 这是错误的,第二个参数应该是属性名称,但您提供的是对象。并且它不会接受第三个参数。(Ember.set 接受三个参数)

    参考这个答案-difference-between-ember-get-and-this-get

    参考: https://emberjs.com/api/ember/2.14/namespaces/Ember/methods/get?anchor=get

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 2012-03-14
      • 2017-08-08
      • 2010-12-24
      • 1970-01-01
      • 2018-08-02
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多