Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确的路线_Javascript_Ember.js - Fatal编程技术网

Javascript 正确的路线

Javascript 正确的路线,javascript,ember.js,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 = Emb

我正在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")

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

原因是未调用IndexRoute.model方法。是

带有动态段的路由只有在通过URL输入时才会调用其模型挂钩。如果路线是通过转换输入的(例如,使用“链接到把手”辅助对象时),则已提供模型上下文,并且不会执行挂钩。没有动态线段的管线将始终执行模型挂钩

解释道

如中所述,在这些情况下,使用
setupController
hook获取模型


使用
setupController
处理您的代码对不起,我迟到了,这可能对您没有任何用处。我只是想把它贴在这里,以防对其他人有用

这个链接帮助我,解决了我的问题

方法1:我们可以为路线提供模型。将使用路由的序列化挂钩将模型序列化到URL中:

var model = self.store.find( 'campaign', { fb_id: fb_id } );
self.transitionToRoute( 'campaign', model);
这对于路由来说很好,但是URL可能被篡改。对于这种情况,我们需要添加额外的逻辑来序列化传递到新路由中的对象并更正URL

方法2:如果传递了文本(如数字或字符串),它将被视为标识符。在这种情况下,将触发路线的模型挂钩:

self.transitionToRoute( 'campaign', fb_id);
这将调用model(),并在路由上正确显示所需的URL。setupController()将在模型()之后立即调用


第二个对我来说很好很好。希望它有用,并回答了上述问题。

您使用的是哪个版本的emberjs???在以前版本的ember中,
转换
不一致。但是希望这已经通过
路由器改头换面解决了
我有两个资源,因为我试图使查询参数成为可选的这是用javascript而不是咖啡编写的小提琴,但它是相同的代码。。。这对您有帮助吗???实际上,我的问题是在查询更改时再次获取模型,因为当我调用TransitionRoute时,不会再次调用路由的model方法。我应该在onChangeQuery中调用findByQuery方法吗?请注意,如果将字符串作为动态段传递给
transitionTo/TransitionRoute
,那么模型钩子将被命中。传递一个对象,它将被跳过,但是
beforeModel
afterModel
仍然被命中。老实说,提供的引用一直让我感到困惑。这听起来总是像:“模型钩子在动态路由上只被调用一次,但是模型钩子在动态路由上每次都被调用”没有意义。。。我现在明白了它的意思,但它仍然读起来很混乱。有没有任何关于设计这种行为的原因的讨论?我想知道他们为什么决定这样做……这太违反直觉了。为什么会有这样的例外?但动态细分市场通常需要不同的模型。那么他们为什么要设计成不调用模型钩子呢?到底是什么?