使用TransitiontoRoute时,并不总是在ember中调用Model / SetUpController挂钩

时间:2015-01-16 19:24:50

标签: ember.js routing transitions

在bakend准备好之前,我正在从我的ajax调用中返回一些静态json用于测试目的。当我从某个函数使用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中正确完成,这个变量设置应该在哪里?

1 个答案:

答案 0 :(得分:1)

对不起,我迟到了,这可能对你没用。我只是想在这里发布,如果它可能对其他人有用。

http://tomsondev.bestsolution.at/2015/07/24/developing-a-source-code-editor-in-javafx-without-e4-and-osgi/帮了我,解决了我的问题。

方法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()将在model()之后立即调用。

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