linkTo帮助器是否缓存其值?

时间:2013-01-07 16:36:57

标签: ember.js

生成的链接为:

{{#linkTo mode filterB currentMode}}

在第一次渲染时显示正确的currentMode值,但随后它会卡在该模式下,甚至currentMode也会更改为不同的值,链接不会更新。这是demo code on 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 /时,link / filter / filterA / mode / modeA保持不变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'对上下文更改没有反应。我还不清楚它是否是有意的。

0 个答案:

没有答案