链接生成为:
{{#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' 不会对上下文更改做出反应。我仍然不清楚这是否是故意的。