正确的TransitionToRoute方式

axe*_*hzf 6 javascript ember.js

我在ember.js上进行实时搜索.这是代码

App.Router.map ->
    @resource "index", {path : "/"}
    @resource "index", {path : "/:query"}

App.Torrents =
    findByQuery : (query) ->
        url = "/api/find/#{query}"
        $.getJSON(url)

App.IndexRoute = Ember.Route.extend

    model : (params) ->
        App.Torrents.findByQuery(params.query)

App.IndexController = Ember.ArrayController.extend

    onChangeQuery : _.debounce(->
        query = @get("query")
        @transitionToRoute("index", {query  : query})
    , 500).observes("query")
Run Code Online (Sandbox Code Playgroud)

我有一个绑定到输入的查询属性.当输入更改我想转换到传递新查询参数的路由时,但是没有调用IndexRoute.model方法.

Hyd*_*der 9

原因IndexRoute.model方法没有被调用.是

具有动态段的路径只有在通过URL输入时才会调用其模型钩子.如果通过转换输入路径(例如,使用链接到Handlebars帮助程序时),则已提供模型上下文并且不执行挂钩.没有动态段的路由将始终执行模型挂钩.

在这里解释.

因此,正如本期中所讨论的setupController,在这些情况下,使用钩子来获取模型.

使用代码的工作binsetupController

  • 请注意,如果将字符串作为动态段传递给`transitionTo/transitionToRoute`,则会触发模型钩子.传递一个对象,它将被跳过,但仍然会遇到`beforeModel`和`afterModel`. (3认同)