0

IDに基づいてember jsの検索を行いたいです。

その ID を持つオブジェクトが存在する場合、そのオブジェクトに対して何らかのロジックを実行したいと思います。

そのため、次のコードに基づいてこれを行います。

Cluey.UsersController = Ember.ArrayController.extend({
  keypadNum: "",
  loginWithPin: function() {
    var res;
    console.log("Login with pin: " + this.get('loginPin'));
    res = Cluey.User.find({
      pin: this.get('loginPin')
    });
    return res.on('didLoad', function() {
      var user;
      if (res.get('firstObject') != null) {
        user = res.objectAt(0);
        return this.doLogin(user);
      } else {
        return alert("User not found with pin " + this.get('loginPin'));
      }
    });
  },
  doLogin: function(user) {
    //some code
  }
});

問題は、 res.on('didLoad') コールバックに入ると、コントローラーのスコープが失われるため、 this.get("loginPin") にアクセスしようとすると、未定義として返されることです。

誰でもこれを解決する方法を知っていますか。

ありがとう!

4

2 に答える 2

1

イベントの 2 番目のパラメーターとしてオブジェクトを渡すとon、それがコールバックのコンテキストになります。

イベントthisの 2 番目のパラメーターとして渡すことができます。didLoad

res.on('didLoad', this, function() {
  var user;
  if (res.get('firstObject') != null) {
    user = res.objectAt(0);
    return this.doLogin(user);
  } else {
    return alert("User not found with pin " + this.get('loginPin'));
  }
});
于 2013-04-24T14:53:51.683 に答える
0

と呼ばれる var を作成し、それselfに割り当てることができますthis

Cluey.UsersController = Ember.ArrayController.extend({
  keypadNum: "",
  var self = this;
  loginWithPin: function() {
    var res;
    console.log("Login with pin: " + this.get('loginPin'));
    res = Cluey.User.find({
      pin: self.get('loginPin')
    });
    return res.on('didLoad', function() {
      var user;
      if (res.get('firstObject') != null) {
        user = res.objectAt(0);
        return this.doLogin(user);
      } else {
        return alert("User not found with pin " + this.get('loginPin'));
      }
    });
  },
  doLogin: function(user) {
    //some code
  }
});
于 2016-11-03T20:43:37.957 に答える