0

我是 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') );

我没有得到我当前的模板对象,我得到的是'未定义'。
我怎样才能使这个可链接?

4

2 回答 2

1

您正在get函数内部进行异步调用。请求可能需要 100 毫秒、1 秒或 10 秒,当get函数完成并返回时,请求仍将处于挂起状态。相反,您需要做的是,将回调函数传递给get并在成功时调用它。

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

请注意,您不会从 get 函数返回任何内容。调用它的一种示例方法是:

tpl.get('component', function(responseText) { alert(responseText); });
于 2010-08-24T15:47:49.497 回答
-1

您的 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;
}
于 2010-08-24T13:58:45.433 回答