在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中正确完成,这个变量设置应该在哪里?
答案 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()之后立即调用。
第二个对我很好。希望它有用并回答上述问题。