1

我对 Javascript 中的整个原型想法很陌生,从我到目前为止收集到的内容来看,它基本上是一个用于创建新对象的模板。

无论如何,我有一个对象“Schedule”,它是“PageObject”的子对象。这是 Schedule 对象中的一个函数:

Schedule.prototype.serviceSuccessFunction = function(data, status, xqr) {
  var ld;
  ld = Schedule.__super__.serviceSuccessFunction.call(this, data, status, xqr);
  ld.done($.proxy(function(x) {
    return console.log(this);
  }, this));
  ld.done($.proxy(this.render, this));
  return ld.done($.proxy(this.modernizeAndShow, this));
};

这是 PageObject 的函数的样子(从它的子函数调用):

PageObject.prototype.serviceSuccessFunction = function(data, status, xqr) {
  $.mobile.loading("show");
  return $.when($.mobile.loadPage("pages/" + this.url, {
    pageContainer: $("#" + this.loadOptions.loadSection)
  }));
};

如您所见,PageObject 正在返回此移动页面加载时的延迟对象。然后我在 Schedule 对象中有自定义的 .done() 函数。这些完成的功能将根据“数据”参数的内容进行渲染。

这个“数据”参数来自另一个延迟对象(使用 $.ajax)。当我在调度成功函数的第一行设置断点时,“数据”被正确地填充了 ajax 调用返回的内容。

现在我的问题是我希望能够使用数据作为参数在 Schedule 中调用不同的函数,或者将数据保存在 Schedule 对象本身上。你认为我将如何将数据对象传递给这些函数?

当我return console.log(this);在线上断点时,“this”是Schedule 对象,这要归功于$.proxy。但我找不到“数据”(我想这是有道理的)。理想情况下,我想将“数据”作为参数传递并执行类似的操作

ld.done($.proxy(function(data) {
  this.rData = data;
}, this));

但上面的“data”或“x”只是.ajax 调用的url。

4

1 回答 1

0

我可能误解了,但你能不能把它放在this.rData = data;“完成”功能之外:

Schedule.prototype.serviceSuccessFunction = function(data, status, xqr) {
  var ld;
  ld = Schedule.__super__.serviceSuccessFunction.call(this, data, status, xqr);

  this.rData = data;

  ld.done($.proxy(function(x) {
    return console.log(this.rData);
  }, this));
  ld.done($.proxy(this.render, this));
  return ld.done($.proxy(this.modernizeAndShow, this));
};

然后 rData 在您的委托中可用。

于 2012-09-07T22:06:52.813 回答