【问题标题】:Model/SetUpController hook not always being called in ember when using TransitiontoRoute使用 TransitiontoRoute 时,模型/SetUpController 钩子并不总是在 ember 中被调用
【发布时间】:2015-03-15 11:47:08
【问题描述】:

我正在从我的 ajax 调用中返回一些静态 json,以在 bakend 准备好之前进行测试。当我从某个函数使用 transitionToRoute 时,我可以看到路由的模型钩子并不总是被调用。我猜它正在缓存静态 json,我看到路由渲染正确。但是我还在 setUpController 钩子中设置了控制器的其他一些属性,当模型钩子没有被调用时,这些属性也不会被执行。

每当我更改此路线时,都需要设置此变量。如果 setUpController 不是设置它的地方,我应该在哪里设置它。因此,当 ember 不调用模型挂钩作为缓存过程的一部分时,它不会设置失败。

    setupController : function(controller, model ) {


        controller.set('isEditing',false);
        controller.set('messages', model.messages);
        controller.set('params', this.get('params'));


        console.log('Set Up controller' );


    },  


    model: function( routeParams) {


        this.set('params',routeParams);
        // return data omitted code

        });


   }

所以当模型钩子被绕过时,isEdiding 字段不会被设置。一种解决方案是在像这样过渡之前设置它

this.controllerFor("messages").set('isEditing',false);
// then do tranisitioning

有没有更好的方法来实现同样的目标?理想情况下,如果在 Ember 中正确完成此变量设置,应该在哪里完成?

【问题讨论】:

  • 你能在这里复制你的问题吗? emberjs.jsbin.com/nazubi/1/edit?html,js,console,output
  • 当您使用 transitionTo/transitionToRoute 并提供模型时,不会调用模型挂钩。 setupController 仅在该路由尚未出现在页面上,或者该路由(或父路由)的模型发生更改时才被调用。
  • @Kalman 嗨,我相信我错误地陈述了这个问题。因此,我确实相信,如果没有更改路线的动态分段,则不会发生自我转换。所以在那种情况下,transitionToRoute 基本上不会调用模型钩子。但是,更改其中一个动态段会触发 transitionToRoute 导致通过模型和控制器钩子。我可能错了,但在我看来这是默认的 ember 路由行为。

标签: ember.js routing transitions


【解决方案1】:

对不起,我迟到了,这可能对你没有任何用处。我只是想把它贴在这里,以防万一它对其他人有用。

这个link 帮助了我,解决了我的问题。

方法一: 我们可以提供路线的模型。模型将使用路由的序列化钩子序列化为 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() 将在 model() 之后立即调用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2015-12-06
    相关资源
    最近更新 更多