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、 在这种情况下,永远不会单击“上一步”按钮。