我正在使用从服务器中提取的json文件来配置我的网站,并告诉每个页面它的标题是什么。 json文件如下所示:
[{"route": "student", "title": "Student Info Page"}, {"route": "payments", "title": "Payments and Pricing"}, {"route": "policy", "title": "Mine"}, {"route": "biography", "title": "About Me"}]
用于使用以下代码创建导航栏:
App.MenuController = Ember.ArrayController.create();
$.get('config.json', function(data) {
App.MenuController.set('content', data);
});
然后在模板中使用:
{{#each App.MenuController}}
{{#varLink route this}}{{title}}{{/varLink}}
{{/each}}
到目前为止,这一切都很有效。
所以这是我的问题:我希望用App.Router.map
完成的路由映射以编程方式完成,使用这个json对象来确定应该存在哪些路由。
我该怎么做呢?我在文档中搜索过,然后尝试了这个:
$.get('config.json', function(data) {
App.MenuController.set('content', data);
for (var i = 0; i < data.length; i++) {
App.Router.map(function(){
var r = data[i].route;
console.log(r);
this.route(r);
});
}
});
,它提供以下控制台读数:
student app.js:9
payments app.js:9
policy app.js:9
biography app.js:9
Assertion failed: The attempt to linkTo route 'student' failed. The router did not find 'student' in its possible routes: 'index' ember.js:361
Uncaught Error: There is no route named student.index ember.js:23900
答案 0 :(得分:5)
我用它来动态创建路径:
App = Ember.Application.create();
App.MenuController = Ember.ArrayController.create();
App.deferReadiness();
simulateAjax(function(data) {
App.MenuController.set("content", data);
App.Router.map(function() {
var router = this;
data.forEach(function(item) {
router.route(item.route);
});
});
App.advanceReadiness();
});
simulateAjax
只是一个模拟对服务器的ajax调用的函数。
App.deferReadiness();
和App.advanceReadiness();
会延迟应用程序启动,因此您无法获得屏幕闪烁的效果,因为更新了新添加的路由。由于我们的应用程序准备就绪:创建路径时,不准备文档。
这是一个demo
link-to
帮助器使用对象和路径支持动态路由。
但目前需要使用ENV.HELPER_PARAM_LOOKUPS = true
。
有了这个,我们不需要创建自定义linkTo
来处理动态路径,就像第一个演示一样;)
新demo