0

在我调用 commit() 之后,我正在为做什么而苦苦挣扎。我想根据commit()成功或服务器是否返回错误来确定如何路由用户。

我在某处读到,如果服务器上出现错误,那么它可以返回 >400 的状态代码和如下错误:

{ 'errors' : [ { 'errorCode' : [ 'duplicate-user' ] } ] }

在客户端,我有以下内容:

App.UsersController = Ember.ObjectController.extend({

    createUser : function () {
        'use strict';

        var user = App.User.createRecord({
                firstName : $("#firstName").val(),
                lastName : $("#lastName").val(),
                primaryEmailAddress : $("#primaryEmailAddress").val(),
                password : $("#password").val()
            }),

            commitObserver = Ember.Object.extend({
                removeObservers : function (sender) {
                    sender.removeObserver('isError', this, 'error');
                    sender.removeObserver('isValid', this, 'success');
                },
                error : function (sender, key, value) {
                    this.removeObservers(sender);
                    App.Router.router.transitionTo('duplicateuser');
                },
                success : function (sender, key, value) {
                    this.removeObservers(sender);
                    App.Router.router.transitionTo('usercreated');
                }
            });

        user.get('transaction').commit();

        user.addObserver('isError', commitObserver.create(), 'error');
        user.addObserver('isValid', commitObserver.create(), 'success');
    }
});

(注意:我没有在我的 HTML 中使用“Ember.TextField”,因此使用了 jQuery)

我有几个问题:

  1. 这是处理提交()的正确/最佳方法吗?

  2. 我发现我必须删除两个观察者isValid之后调用isError- 这是可以预期的吗?

  3. 我如何/可以访问服务器响应,因为我希望能够根据错误代码做出路由决定?

  4. 我可以引用路由器的唯一方法是通过App.Router.router- 有没有更清洁的方法?

  5. 如果出现错误,我是否需要做任何事情来从商店中删除记录,以便将来不会重新提交?

4

2 回答 2

1

在控制器中,您可以执行以下操作:

this.get('target').transitionTo('another.route')

或者,您可以将事件发送到当前路由并从那里转换:

this.get('target').send('eventName');

或者如果您需要传递模型:

this.get('target').send('eventName', this.get('content'));
于 2013-03-11T04:00:44.413 回答
0

只需使用 controller.transitionToRoute("your.route"); 请参阅此链接以获取源代码...

于 2013-03-12T17:12:26.153 回答