【问题标题】:Can I still use PromiseProxyMixin with Ember.Controller?我还能将 PromiseProxyMixin 与 Ember.Controller 一起使用吗?
【发布时间】:2015-11-03 03:06:55
【问题描述】:

Ember 文档将PromiseProxyMixin 描述为:

使 ObjectProxy、ObjectController 或 ArrayControllers promise-aware 的低级 mixin。

(注意它没有提到Controller。)

我一直在 ModalController 中使用 PromiseProxyMixin,该 ModalController 最初是从 Ember.ObjectController 扩展而来的。

现在 ObjectController 已弃用(Ember 1.11),我已将此控制器转换为扩展 Ember.Controller,但它不再按预期工作。

具体来说,返回到promise 属性的对象的属性不会自动设置在Controller 中(就像它们在ObjectController 中一样。

我的isFulfilled 观察者仍在触发,但未设置应从返回对象合并的属性。

文档还指出:

由于控制器是一个 ObjectController,而 json 现在是它的内容,所有的 json 属性都可以直接从控制器中获得。

所以我想从现在开始我只需要手动设置这些属性吗?

【问题讨论】:

    标签: javascript ember-1


    【解决方案1】:

    PromiseProxyMixin 尚未被弃用,并在其他上下文中使用。 git 上的current API docs 没有提到控制器。你看到的措辞已经改变,我认为继续使用是安全的。

    由于代理是 ObjectProxy,而 json 现在是它的内容,所有 json 属性都可以直接从代理获得。

    // Assuming the following json:
    {
      firstName: 'Stefan',
      lastName: 'Penner'
    }
    // both properties will accessible on the proxy
    proxy.get('firstName') //=> 'Stefan'
    proxy.get('lastName')  //=> 'Penner'
    

    【讨论】:

    • PromiseProxyMixin 尚未被弃用 是的,但 ObjectController 是,无论出于何种原因,Promise 返回的属性的自动合并不会与 Controller 发生. PromiseProxyMixin 的其余功能仍然有效。我能够观察到isFulfilled 没有事件。
    【解决方案2】:

    因为Promise 返回的属性的合并不再自动发生,所以我的选择似乎是:

    1. 将Controller 转换回ObjectController(方向错误)
    2. 手动合并 Promise 返回的对象的属性(如果我在通用 MyProxyMixin 或类似的地方这样做,这可能有意义)
    3. 将Controller 转换为ObjectProxy(对此不确定)
    4. 使用 Ember 的ProxyMixin

    我更喜欢 #4,但是围绕这个 mixin 有一些变化(它作为 Ember.FEATURE 启用了一段时间,但似乎又被设为私有。)

    最终我选择了#2。 (我刚刚更新了我的代码,将我需要的属性复制到了Controller。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多