gpt4 book ai didi

routing - ember.js 中是否有回调,我可以在状态转换后呈现所有 View 后使用它来运行代码?

转载 作者:行者123 更新时间:2023-12-01 04:01:22 25 4
gpt4 key购买 nike

我有由三个导出组成的应用程序 View :

<script type="text/x-handlebars" data-template-name="application">
{{outlet header}}
{{outlet content}}
{{outlet footer}}
</script>

呈现自己的观点(简化):
<script type="text/x-handlebars" data-template-name="header">
<a href="#" data-role="button" data-icon="arrow-l" data-iconpos="notext"
{{action changeDate view.prevDate href=true}}>Prev</a>
{{view.model.weekDay}}
<a href="#" data-role="button" data-icon="arrow-r" data-iconpos="notext"
{{action changeDate view.nextDate href=true}}>Next</a>
</script>

<script type="text/x-handlebars" data-template-name="content">
{{view.model.month}}
</script>

<script type="text/x-handlebars" data-template-name="footer">
{{view.model.day}}
</script>

和使用路由逻辑刷新 View 的应用程序路由器
Router: ember.Router.extend({
root: ember.Route.extend({
changeDate: ember.State.transitionTo('date'),
index: ember.Route.extend({
route: '/',
connectOutlets: function (router) {
router.transitionTo('date', new Date());
}
}),
date: ember.Route.extend({
route: '/:date',
serialize: function (router, date) {
return { date: toUrlString(date) };
},
deserialize: function (router, param) {
return parseUrlString(param.date);
},
connectOutlets: function (router, date) {
var appController = router.get('applicationController'),
controller = router.get('dayController');
controller.navigateTo(date || new Date());
appController.connectOutlet({ outletName: 'header', viewClass: router.namespace.HeaderView, controller: controller });
appController.connectOutlet({ outletName: 'content', viewClass: router.namespace.ContentView, controller: controller });
appController.connectOutlet({ outletName: 'footer', viewClass: router.namespace.FooterView, controller: controller });
}
})
})
})

这一切都很好,除了一件事 - 应用程序使用 jQuery Mobile,在重新渲染 View 后,我需要将 jqm 增强应用于更新的元素。
我尝试使用 didInsertElement每个 View 中的回调以增强已重绘的部分。但它没有按预期工作,因为 jqm 对页眉和页脚块有非常特殊的处理。除非使用 .trigger('pagecreate') 重新初始化所有页面,否则它们不会得到适当增强。或使用 .page('destroy').page()在根应用程序 View 上。

问题是 - 每个 View 都调用自己的 didInsertElement ,因此增强代码执行了 3 次。

在路由转换完成并且所有受影响的 View 都用当前数据渲染和更新后,是否有一种可靠的方法来执行增强代码?

最佳答案

我最近添加了一些有助于解决这个问题的东西,一个 afterRender 队列。见 this commit ,特别是对用法示例的测试。

关于routing - ember.js 中是否有回调,我可以在状态转换后呈现所有 View 后使用它来运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com