Приложение Ember, использующее маршрутизатор, не работает с тегом {{action}} handlebars
Я делаю простое приложение Ember, которое использует Tumblr json, выводит список сообщений, а затем позволяет перейти к подробному представлению сообщений со ссылкой на представление сообщений по умолчанию.
Проблема сейчас заключается в том, что при использовании {{action}}
тег шаблона handlebars, ссылка на маршрут "showHome" не работает, а действие "showPost" показывает последний пост в json вместо того, который указан в качестве контекста в теге action.
Вот мои шаблоны:
<script type="text/x-handlebars" data-template-name="main-tmpl">
<h1>
<a {{action showHome}}>{{view.content.title}}</a>
</h1>
{{&view.content.description}}
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="post-tmpl">
{{#if view.content.is_photo }}
{{#if view.detail }}
<img {{bindAttr src="view.content.photo-url-500"}}>
{{else}}
<a {{action showPost view.content href=true}} class="thumbnail">
<img {{bindAttr src="view.content.photo-url-75"}}></a>
{{/if}}
{{/if}}
</script>
Вот мои маршруты:
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
showHome:Ember.Route.transitionTo('index'),
showPost:Ember.Route.transitionTo('postDetail'),
loading: Em.Route.extend({
connectOutlets: function(router, context){
router.get('applicationController').connectOutlet('loading', context)
}
}),
index: Em.Route.extend({
route: '/',
deserialize:function(router, params) {
var deferred = jQuery.Deferred(),
resolve = function() { console.log("resolved"); deferred.resolve() }
/* Cut for brevity [...] */
return deferred.promise()
},
connectOutlets:function(router) {
router.get('applicationController').connectOutlet('tumbleLog')
router.get('tumbleLogController').connectOutlet('posts')
}
}),
postDetail:Em.Route.extend({
route:'/post/:id',
connectOutlets:function(router,post) {
console.log('my post is', post)
router.get('tumbleLogController').connectOutlet('postDetail', post)
}
})
})
})
А вот и скрипка: http://jsfiddle.net/colinkahn/PegYL/
1 ответ
Я не знаю погоду, это может считаться ответом, но, как я уже говорил в комментариях, по состоянию на сегодня (25 октября 2012 года) это можно решить, заменив ember-1.0-pre на ember-latest, начиная с 1.0-pre имеет известные ошибки, которые исправляются в последних. Кроме того, как упоминал Эдуард, в процессе разработки всегда полезно иметь enableLogging
установлен в true
в вашем роутере, чтобы вы знали, что происходит. мир