[英]Ember nested routes and promises
當直接使用嵌套路由訪問余燼URL時,應用程序不會等待父承諾解析后再加載嵌套資源。
這是一個示例代碼:
var App = Ember.Application.create();
App.Router.map(function () {
this.resource('index', {path: "/"}, function () {
this.resource('project', {path: "/project/:id"}, function () {
this.resource('file', {path: "/file/:encodedPath"});
});
});
});
App.IndexRoute = Ember.Route.extend({
model: function () {
return Ember.$.getJSON('/list-projects');
}
});
App.ProjectRoute = Ember.Route.extend({
setupController: function (controller, model) {
return Ember.$.getJSON('/load-project?id=' + model.id).then(
function (data) {
controller.set('model', data);
});
}
});
App.FileRoute = Ember.Route.extend({
setupController: function (controller, model) {
var project = this.modelFor('project');
var url = '/load-file?project=' + project.id + '&path=' + model.encodedPath;
return Ember.$.getJSON(url).then(
function (data) {
controller.set('model', data);
});
}
});
加載文件數據之前是否可以等待項目數據解析?
僅在直接在瀏覽器中加載URL時,才會出現此問題: http : //mywebsite.com/#/project/1234/file/test.txt
謝謝。
根據我對您的問題的評論,這應該可以解決問題。 請注意, model
掛鈎可以返回Promise
而setupController
不應該返回任何東西。
這是一個嘗試與您的項目相對應的JSBin-顯然數據是不同的: http ://emberjs.jsbin.com/letalehoje/1/edit?html,js,console,output
確保您也從外部查看它: http : //emberjs.jsbin.com/letalehoje/1/#/project/1/file/text1-1.txt
App.ProjectRoute = Ember.Route.extend({
model: function(params) {
return Ember.$.getJSON('/load-project?id=' + params.id);
}
});
App.FileRoute = Ember.Route.extend({
model: function(params) {
var projectPromise = this.modelFor('project');
return Ember.RSVP.resolve(projectPromise).then(function(project) {
// this is the promise that should be returned for the FileRoute model
return Ember.$.getJSON('/load-file?project=' + project.id + '&path=' + params.encodedPath);
});
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.