Ember.js 方向感知转换,带有余烬液体火';s{{带}}辅助物的液体
在我的余烬应用程序中,当动态路线的模型发生变化时,我希望在同一路线内进行漂亮的液体火过渡。这是我的路由器:Ember.js 方向感知转换,带有余烬液体火';s{{带}}辅助物的液体,ember.js,Ember.js,在我的余烬应用程序中,当动态路线的模型发生变化时,我希望在同一路线内进行漂亮的液体火过渡。这是我的路由器: // app/router.js Router.map(function() { this.route("campaigns", { path: "/" }, function() { this.route("campaign", { path: "/campaign/:election_year" }); }); }); 我希望在切换到未来的选举年时(
// app/router.js
Router.map(function() {
this.route("campaigns", { path: "/" }, function() {
this.route("campaign", { path: "/campaign/:election_year" });
});
});
我希望在切换到未来的选举年
时(例如,从campaign/2008
切换到campaign/2012
),将屏幕左移,反之则向右移
我的第一个想法是在app/transitions.js
文件中使用{{liquid outlet}}
和toModel
函数,但是Edward Faulkner(liquid Fire的创建者)说
“液体出口”不处理同一平台上的模型到模型转换
路线
我应该用
{{liquid with}}
来代替。然而,我不知道如何处理方向性,也就是说,当选举年增加时,使视图向左移动,当选举年减少时,使视图向右移动。有什么线索吗?当使用带有的液体(或液体绑定
)辅助对象时,动画中不一定涉及路线或模型,因此像toRoute
或toModel
这样的约束不适用。相反,您可以使用toValue
,它将匹配您传递给帮助器的任何内容
假设您正在通过transitions.js将活动
模型传递给liquid with
,您可以在transitions.js中使用如下规则:
this.transition(
this.toValue(function(newValue, oldValue) {
return newValue instanceof Campaign &&
oldValue instanceof Campaign &&
newValue.electionYear > oldValue.electionYear
}),
this.use('toLeft'),
this.reverse('toRight')
)
说明:
我们有一个约束,一个在匹配时使用的动画(toLeft
),以及一个在匹配“to”和“from”反转时使用的动画(toRight
)
所有规则约束(包括toValue
,fromRoute
等)都可以接受:
- 将与比较的简单值,如
toValue(42)
或toRoute('posts')
- 正则表达式,如
toRoute(/unicorn/)
- 测试值的函数,如
toValue(n=>n>1)
李>
- 比较值和“其他值”的函数,如
toValue((newThing, oldThing) => newThing.betterThan(oldThing))
最后一个案例是我们在上面的解决方案中使用的
(我们正在继续完善这些API。在这种情况下,我认为我们应该为比较规则添加一个显式名称,如this.compareValues(函数(oldValue,newValue){…})
,而不是仅仅重载toValue
来进行比较。但这不应该影响您的解决方案,因为我不会在可预见的将来破坏现有的行为。)也许您可以修改液体宽度的use
参数:{{{#液体运动作为运动使用=方向}
(将方向设置为向左
或向右
)这是否意味着我必须向竞选
控制者添加一些计算属性方向
?但该属性如何知道选举年
是增加还是减少?willTransition
钩子可以改变方向
属性:很好的答案。有没有办法使转换依赖于用户输入?每当用户单击“下一步”按钮时,我希望有一个“toLeft”转换,而“previous”则有一个“toRight”转换按钮。这样做更容易和将来的证明。你必须有足够的信息来知道哪个是当前模型的下一个模型,所以你可以通过查看这两个模型来测试它。这样,即使你改变了你的UI,意图也被保留了。也考虑到用户可以通过后面的Butto导航。n、 在这种情况下,永远不会单击“上一步”按钮。