代码之家  ›  专栏  ›  技术社区  ›  Yosi

如何确定在MooTools中完成请求的时间?

  •  0
  • Yosi  · 技术社区  · 14 年前

    我不熟悉moootools,我正在创建一个模板类,这是我的代码-

    var Template = new Class({
      Singleton : true,
      template : '',
    
      /* gets the component type template */
      get : function(componentType){
        var tplUrl = Core.getUrl('backend') + 'response/' + componentType + '/get_template.php',
            that = this,
            request = new Request({url: tplUrl, method : 'get',onSuccess : function(responseText){
              that.template = responseText; 
              return that;
            }}).send(); 
      }
    
    });
    

    我想做的是:

    var tpl = new Template();
    tpl.get('component').setTemplateData({name:'yosy'});
    

    问题是当我调用此代码时:

    var tpl = new Template();
    console.log( tpl.get('component') );
    

    我没有得到我当前的模板对象,我得到的是“未定义”。
    我怎么能把它拴起来?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Anurag    14 年前

    您正在内部进行异步调用 get 功能。请求可能需要100毫秒、1秒或10秒,并且 得到 函数完成并返回,请求仍将挂起。相反,您需要做的是,将回调函数传递给 得到 并称之为成功。

    get: function(componentType, successCallback) {
        var request = new Request({
            ..,
            onSuccess: successCallback
        }).send();
    }
    

    请注意,您没有从get函数返回任何内容。调用此函数的一个示例方法是:

    tpl.get('component', function(responseText) { alert(responseText); });
    
        2
  •  -1
  •   Riwen    14 年前

    get函数缺少返回值。如果希望函数链接,则应返回对象本身:

    get : function(componentType){
    var tplUrl = Core.getUrl('backend') + 'response/' + componentType + '/get_template.php',
        that = this,
        request = new Request({url: tplUrl, method : 'get',onSuccess : function(responseText){
          that.template = responseText; 
          return that;
        }}).send(); 
    
        return this;
    }