gpt4 book ai didi

sproutcore - 在 SproutCore 中直接路由到子状态时如何设置 Controller 选择?

转载 作者:行者123 更新时间:2023-12-03 13:37:58 25 4
gpt4 key购买 nike

如果我有通往应用程序深处某个状态的路由,我如何确保已完成正确的 Controller 设置,尽管我将直接进入内部状态?

例如,

  • 状态 A
  • 状态 a,表示路由:'a'
  • 状态 B
  • 状态 b,表示路由:'a/b'
  • 状态 C
  • 状态 c,表示路由:'a/b/c'
  • 状态 D
  • 状态 d,表示路由:'a/b/c/d
  • 状态 E

  • 如您所见,您可以直接路由到状态“a”、“b”、“c”或“d”,但您看不到的是,通常您可以通过在 Controller 中选择一个项目来在这些状态之间切换,然后将触发状态转换到更深的状态。那么问题是,当您直接进入状态“d”时,没有设置任何 Controller 的选择。

    到目前为止,我使用了 enterStateByRoute在状态 'a' 设置第一个 Controller 的选择,然后必须使用 enterStateByRoute在状态 'b' 中选择第一个和第二个 Controller 等,一直到 enterStateByRoute在状态“d”中一直选择每个 Controller 。这是相当浪费的,因为我最终在每个 enterStateByRoute 中重复相同的代码.

    设置 Controller 选择以匹配直接路由状态的最佳方法是什么?

    最佳答案

    一旦我意识到enterStateByRoute,我就能大大改善这种情况。路由时在链中的所有父状态上调用。这意味着如果状态'c'匹配路由,将进入状态'A',然后是状态'B'和状态'C',最后进入状态'c'。我之前没有意识到这些状态中的每一个都通过了 SC.StateRouteHandlerContext输入的对象允许您检查 enterState 中的上下文或实现enterStateByRoute在任何一个州。

    我的解决方案是添加 enterStateByRoute状态 'A' 设置第一个 Controller ,添加 enterStateByRoute到状态“B”来设置第二个 Controller 等。例如,通过这种方式,任何超过状态“A”的状态都保证有第一个 Controller 选择集,并且我没有任何重复的代码链。

    例如,

    // … 
    state_A: SC.State.extend({
    initialSubstate: 'state_a',

    enterStateByRoute: function (context) {
    // select object on controller 1 since we are routing
    },

    state_a: SC.State.extend({
    representRoute: 'a',

    enterStateByRoute: function (context) {
    // do setup for state 'a' specific to routing
    }
    }),

    state_B: SC.State.extend({
    initialSubstate: 'state_b',

    enterStateByRoute: function (context) {
    // select object on controller 2 since we are routing
    },

    state_b: SC.State.extend({

    enterStateByRoute: function (context) {
    // do set up for state 'b' specific to routing
    },
    // …

    我遇到的唯一问题是,因为我已经将所有 Controller 绑定(bind)在一起,选择更改不会立即传播,所以我会在第一个状态的 Controller 上选择一个对象,进入下一个状态并发现绑定(bind)的 Controller '内容还没有更新。

    所以我可以通过返回 SC.Async 来等待绑定(bind)刷新。 enterStateByRoute 中的对象并使用了 this.invokeLast(function () { this.resumeGotoState(); })在运行循环结束时进入下一个状态,但我采用了声明性方法,并在进入/退出适当状态时简单地设置/取消设置每个 Controller 的内容。

    关于sproutcore - 在 SproutCore 中直接路由到子状态时如何设置 Controller 选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698300/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com