生成的链接为:
{{#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'对上下文更改没有反应。我还不清楚它是否是有意的。