0

ajaxリクエストを行うバックボーンアプリケーションにユーザーモデルがあります。エラーコールバックで、ビューに渡すエラーメッセージを設定したいと思います。しかし、やってみると

this.set({errors: result.errors});

「これ」にはメソッドが設定されていないと言われています。この場合、「これ」はajax応答オブジェクトであると思います(メソッドが設定されているUserモデルではありません)

Object {url: "/users.json", isLocal: false, global: true, type: "POST", contentType: "application/x-www-form-urlencoded; charset=UTF-8"…}

しかし、私もやろうとしました

  this.model.set({errors: result.errors});

でも未定義の「セット」とは言えないとのことでした。モデル内から「this.model」と言うのは意味がないと思いますが、前述のように、「this」とだけ言うと、応答オブジェクトを指します。

これは間違った方法ですか?

4

2 に答える 2

3

モデルを保存するときに、このようなことをしていると思います

model.save({
  success: function() {},
  error: function() {
    this.set({ errors: result.errors });
  }
});

その場合は、 に変更this.setするmodel.setと、すべてが機能します。

ただし、エラー メッセージをモデル属性として保存することはあまり意味がありません。

サーバー上で保存呼び出しが失敗すると、モデルはイベントを発生させます (バックボーン イベント カタログを確認してください)。

したがって、モデルがアタッチされたビューがある場合は、ビューにこのエラー イベントをリッスンするように指示できます。

var MyView = Backbone.View.extend({
  initialize: function() {
    // if your using backbone v0.9.10
    this.listenTo(this.model, 'error', this.handleModelError);
    // or for earlier versions
    this.model.on('error', this.handleModelError, this);
  },

  handleModelError: function(model, xhr, options) {
    // show an error message, or whatever
  }

});

var view = new MyView({ model: aModel });

// if the server returns an error, view.handleModelError will be called
aModel.save();
于 2013-02-11T01:28:22.113 に答える
0

これはおそらく文脈を失うと思います。var self = this を使用してみてください。何かのようなもの:

var self = this;
model.save("author", "F.D.R.", 
{error: function()
{ 
    self.model.set({errors: result.errors}); 
}});
于 2013-02-12T01:04:20.300 に答える