リンクは次のように生成されます。
{{#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/modeB として再レンダリングする必要がある場合、リンク /filter/filterA/mode/modeA は変更されません。そのような行動が意図的であるかどうかに興味があります。もしそうなら、それを修正する正しい方法とそのような行動の合理性は何ですか?
ありがとう!
更新: このコードは意図したことを行います:
{{#with currentMode}}
<li>{{#linkTo mode "App.filterA" this}}filterA{{/linkTo}}</li>
<li>{{#linkTo mode "App.filterB" this}}filterB{{/linkTo}}</li>
{{/with}}
、 sly7-7のおかげで、「linkTo」はコンテキストの変更に反応しないようです。意図的か否かはまだはっきりしない。