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);
    }
  • 而不是真或假,让你的函数返回一个“承诺”,这样你就可以写一些类似的东西

    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。在回调函数中,将其内容设置为“真”或“假”或您喜欢的任何其他值,并使用事件通知您已经获得 ajax 答案的操作。该解决方案使用一种观察者模式。

于 2013-01-03T09:25:31.573 回答