0

バックボーン モデルの関数内に ajax 関数があります。返されたデータの構成に基づいて、関数 fetchByFBID が true または false を返すようにします。しかし、コールバックが実行されるまでデータが何であるかがわからないため、その関数で true または false を返す方法がわかりません。任意のヒント?

  var UserModel = Backbone.Model.extend({
    urlRoot: '/API/users',
    defaults: { 
      "fbID": "", 
      "firstName": "", 
      "lastName": "", 
      "gender": "", 
      "email": "",
      "site": ""
    },
    fetchByFBID: function(fbID) {
      var that = this;
      console.log(this);
      $.ajax({url: "/API/users/fbID/"+fbID, type: 'GET', success: function(data) {
        if(data === "false") {  
          return false;
        } else {
          that.set(JSON.parse(data));
          return true;
        }
      }});
    }
  });

関数を呼び出すには、次のようにします。

var fbUser = new UserModel();
fbUser.fetchByFBID(response.id);

私の目標は、次のようなことができるようになることです。

var fbUser = new UserModel();
if(fbUser.fetchByFBID(response.id))
  //do something
else
  //do something else
4

2 に答える 2

5

あなたはどちらかをすることができます:

  • 関数に引数としてコールバックを追加し、trueまたはfalseで非同期的に呼び出します

    var fbUser = new UserModel();
    fbUser.fetchByFBID(response.id, function (result) {
      if (result) {
         // do something
      } else {
        // do something else
      }
    );
    

これは同じくらい簡単なはずです

   fetchByFBID: function(fbID, callback) {

   .... do your work .... 
     if(data === "false") {  
      callback.call(null,true); // or callback(true), callback.call(whatever, true), etc...
    } else {
      that.set(JSON.parse(data));
      callback.call(null,false);
    }
  • trueまたはfalseの代わりに、関数が「約束」を返すようにして、次の行に沿って何かを記述できるようにします。

    var fbUser = new UserModel();
    fbUser.fetchByFBID(response.id).whenDone(function (result) {
      if (result) {
          // do something
       } else {
          // do something else
       }
    });
    
于 2013-01-03T09:33:56.180 に答える
0

非表示または任意のdivを追加します。コールバック関数で、その内容を「true」または「false」またはその他の任意の値に設定し、イベントを使用して、ajax応答がすでに取得されていることを操作に通知します。このソリューションは、一種のオブザーバーパターンを使用します。

于 2013-01-03T09:25:31.573 に答える