使用路由器的Ember应用程序无法使用{{action}}把手标记

时间:2012-10-24 17:08:12

标签: ember.js handlebars.js ember-old-router

我正在创建一个简单的Ember应用程序,它需要一些Tumblr json,列出帖子,然后让你转到一个帖子详细信息视图,其中包含一个返回默认帖子视图的链接。

现在的问题是,当使用{{action}}把手模板标签时,返回'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 个答案:

答案 0 :(得分:1)

我不知道天气这可以算作答案,但就像我在评论中所说,截至今天(2012年10月25日),这可以通过替换ember-1.0-来解决预先使用ember-latest,因为1.0-pre已经知道了最新修复的错误。 此外,就像Eduard提到的那样,在开发过程中,将enableLogging设置为路由器中的true总是一个好主意,这样您就可以知道发生了什么。 和平