Ember.js在回调中

时间:2014-04-05 16:14:12

标签: ember.js callback this promise

我在我的控制器中有一个动作来创建一个新的page,这是我的模特之一。

之后,我想清除表单并转换到新的page

这是我的代码:

App.ApplicationController = Ember.ObjectController.extend

    newSlug: (->
        # some function
    ).property('newTitle')

    newMenuName: # some property

    actions:
        addNewPage: ->
            # Get the site
            site = @get('model')
            # Get all the pages associated with the site
            pages = site.get('pages')

            # ...
            # snipped a bunch out to save space
            # ...

            # Create a new page passing in our title, slug and menu_name
            page = pages.createRecord({title: title, slug: slug, menu_name: menu_name, menu_1: menu_1, menu_2: menu_2, menu_1_order: menu_1_order, menu_2_order: menu_2_order})
            page.save().then(onSuccess, onError)

            onSuccess = (page) ->

                page = this.store.find('page', slug)
                console.log('Slug: ' + slug + ' ' + page.slug)

                @set('newTitle', '')
                @set('newSlug', '')
                @set('newMenuName', '')
                $('#addPageModal').foundation('reveal', 'close')
                @transitionToRoute('page', page)

但我收到this没有方法set的错误。我甚至尝试使用self = this,但它给了我同样的错误。

有什么想法吗?

顺便说一下,如果你想知道,在onSuccess内,page没有定义,所以我必须再查一遍。我认为承诺应该返回从API发回的数据。

编辑:

我必须看起来像一个完全愚蠢的人,但是再一次,在这里发布一个问题之后,我自己找到(部分)答案。原来是在CoffeeScript中(到目前为止我并不是它与Ember.js的忠实粉丝)我需要=>所以我的回调函数变为:

onSuccess = (page) =>

    page = this.store.find('page', slug)
    console.log('Slug: ' + slug + ' ' + page.slug)

    @set('newTitle', '')
    @set('newSlug', '')
    @set('newMenuName', '')
    $('#addPageModal').foundation('reveal', 'close')
    @transitionToRoute('page', page)

但是,page仍未定义。不知道该怎么办。

编辑: 而正确的答案是....

App.ApplicationController = Ember.ObjectController.extend

newSlug: (->
    # some function
).property('newTitle')

newMenuName: # some property

actions:
    addNewPage: ->
        # Get the site
        site = @get('model')
        # Get all the pages associated with the site
        pages = site.get('pages')

        # ...
        # snipped a bunch out to save space
        # ...

        onSuccess = (page) ->

            @set('newTitle', '')
            @set('newSlug', '')
            @set('newMenuName', '')
            $('#addPageModal').foundation('reveal', 'close')
            @transitionToRoute('page', page.get('slug'))

        # And just for completeness
        onError = (page) =>
        # Do something

        # Create a new page passing in our title, slug, menu_name, etc.
        page = pages.createRecord({title: title, slug: slug, menu_name: menu_name, menu_1: menu_1, menu_2: menu_2, menu_1_order: menu_1_order, menu_2_order: menu_2_order})
        page.save().then(onSuccess, onError)

0 个答案:

没有答案