1

链接生成为:

{{#linkTo mode filterB currentMode}}

第一次渲染时显示正确的 currentMode 值,但随后它会卡在该模式下,甚至 currentMode 更改为不同的值,链接不会更新。这是GitHub 上的演示代码

<script type="text/x-handlebars" data-template-name="application">
  {{#with App}}
  <div>
    <div style="float:left;width:200px">
      Filters:
      <ul>
        <li>{{#linkTo mode filterA currentMode}}filterA{{/linkTo}}</li>
        <li>{{#linkTo mode filterB currentMode}}filterB{{/linkTo}}</li>
        <li>currentFilter: {{currentFilter}}</li>
        <li>currentMode: {{currentMode}}</li>
      </ul>
    </div>
    <div style="float:left">
    Modes:
      <ul>
        <li>{{#linkTo mode currentFilter modeA}}modeA{{/linkTo}}</li>
        <li>{{#linkTo mode currentFilter modeB}}modeB{{/linkTo}}</li>
        <li>currentFilter: {{currentFilter}}</li>
        <li>currentMode: {{currentMode}}</li>
      </ul>
    </div>
  </div>
  {{/with}}
</script>

<script type='text/coffeescript'>
window.App = App = Ember.Application.create()
App.Router.map (match) ->
  match("/").to("home")
  match("/filter/:filter").to("filter", (match) ->
    match("/mode/:mode").to("mode")
    )

App.modeA = "modeA"
App.modeB = "modeB"
App.filterA = "filterA"
App.filterB = "filterB"
App.currentMode = "modeA"
App.currentFilter = "filterA"

App.FilterRoute = Em.Route.extend
  setupControllers: (controller, filter)->
    App.set('currentFilter', filter)
  serialize: (filter)->
    {filter:filter}
App.ModeRoute = Em.Route.extend
  setupControllers: (controller, mode)->
    App.set('currentMode', mode)
  serialize: (mode)->
    {mode:mode}
</script>

当 currentMode 设置为 modeB 时,ember.js 在过滤器列表中正确呈现其文本值,但链接 /filter/filterA/mode/modeA 保持不变,当它必须重新呈现为 /filter/filterA/mode/modeB 时。我很好奇这种行为是否是故意的,如果是,那么解决它的正确方法是什么,这种行为的合理性是什么?

谢谢!

更新:此代码执行预期的操作:

{{#with currentMode}}
  <li>{{#linkTo mode "App.filterA" this}}filterA{{/linkTo}}</li>
  <li>{{#linkTo mode "App.filterB" this}}filterB{{/linkTo}}</li>
{{/with}}

,感谢sly7-7,看起来 'linkTo' 不会对上下文更改做出反应。我仍然不清楚这是否是故意的。

4

0 回答 0