【问题标题】:how to bind Application controller property in another controller ember如何在另一个控制器余烬中绑定应用程序控制器属性
【发布时间】:2016-05-20 07:19:42
【问题描述】:

我在 ApplicationController 中有搜索属性,它与搜索的输入字段相关联。 我想访问 ProjectController 中 ApplicationController 的搜索字段。它应该是同步的。 我使用以下代码,但它不起作用。

/app/controllers/projects/index.js(项目控制器)

import Ember from 'ember';
export default Ember.Controller.extend({
    needs: ['application'],
    searchBinding: 'controllers.application.search'
});

/app/controllers/application.js(应用控制器)

  import Ember from 'ember';
    export default Ember.Controller.extend({
      search: ''
    )}

应用程序.hbs

{{input value = search}}

【问题讨论】:

  • 你使用什么 ember 版本? needs 和绑定在当前 ember 版本中已弃用。

标签: ember.js ember-data ember-cli ember-components ember-controllers


【解决方案1】:

Ember 需求已被弃用,现在以不同的方式使用。

它是这样工作的:

applicationController: Ember.inject.controller('application'),
mySearch: Ember.computed.alias('applicationController.search')

在您的 hbs 模板中 -

{{mySearch}}

 与应用程序属性“搜索”同步。

【讨论】:

  • 需要:['Controller Name'] 已被弃用?为什么我无法使用 needs:['Controller Name '] 技术访问应用程序控制器?
  • 是的,它已被弃用,在旧的 Ember 中使用过。
【解决方案2】:

您可以通过注入来访问控制器中的任何控制器。

import Ember from 'ember';
export default Ember.Controller.extend({
    applicationController: Ember.inject.controller('application'),
    searchProperty: Ember.computed.alias('applicationController.search'),
)};

Managing Dependences between Ember controllers

【讨论】:

  • 现在是import { inject } from '@ember/controller'; /*...*/ applicationController: inject('application')
【解决方案3】:

您可以通过这种方式访问​​needs 中包含的控制器属性:

{{controllers.neededController.property}}

在你的情况下尝试:

{{input value=controllers.application.search}}

在此处查看示例:http://jsfiddle.net/6Evrq/

【讨论】:

  • 你是对的,我展示的方法已被弃用。我添加了一个 jsfiddle 示例,以防有人需要旧版本 Ember 的解决方案,但您的答案肯定更好。
猜你喜欢
  • 1970-01-01
  • 2014-10-30
  • 2016-07-18
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多