Gog*_*maT 3 ember.js ember-router ember-components
我正在尝试为 ember 2 应用程序制作一个分页组件。由于它是一个通用分页组件,我想在许多不同的路线上使用它。因此,我需要以某种方式(在我看来)提供我的路线名称,以便分页链接正常工作。
我可以轻松地将我的路线名称(字符串)传递给组件:
{{pagination-component myRoute='myCurrentRouteName'}}。以及组件内部:{{link-to myRoute (query-params page=1)}}
它非常适合转到以下页面:<< First, < Previous, Next > , Last >>。
但我还想要一个选择框,其中的选项指向所有页面,如果用户选择一个页面,我可以使用类似于以下的 queryParams 转换到该路由:myRoute?page=selectedPage。ember 的所有教程都说在组件内进行转换是禁忌。
但是,鉴于我希望分页是通用的,并且我不想在处理分页并提供相同精确转换的每个路由中执行操作,我该怎么做呢?
到目前为止,我发现我可以将“-routing”注入到组件中,这可以用于组件内的转换,但由于某种原因它也不能安静地工作。另外,人们说它是私人的且不可靠。我还尝试使用操作制作 Route Mixin,这样我就可以简单地sendAction使用 组件selectedPage,但我不知道如何在我的 Mixin 中获取路由器(以便调用router.transitionTo)。
我们应该使用公共 API 进行转换,该 API 在RoutetransitionTo和 ControllertransitionToRoute中提供。这是推荐的方法。
Ember.getOwner(this).lookup('router:main').transitionTo('myRouteName'),但这强烈反对良好的设计。 myTransitionToUrl内部定义名为的方法,并安装ember-route-action-helper插件来从组件调用路由操作方法。actionsApplicationmyTransitionToUrlmixin在所需的路由中定义并实现它。那也行。我的选择和推荐的方法是,假设pagination-component有prev, next,transtionTo操作,那么我将在所有使用 的路线中实施所有这些操作Mixin并将其扩展pagination-component。并将通知任何数据更改以通过组件的操作进行路由。这也将确保Data Down Actions Up策略。
如果您只是过渡到不同的路线,那么最新的可能方法是,
如果ember版本大于2.15,那么你可以注入RouterService并直接调用transitionTo方法。如果您使用的是ember版本2.15或以下,那么您可以使用路由器服务polyfill来使用RouterService。
import Ember from 'ember';
export default Ember.Component.extend({
router: Ember.inject.service(),
actions: {
next() {
this.get('router').transitionTo('other.route');
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1990 次 |
| 最近记录: |